苹果公司建议使用MPVolumeView
,所以我想出了这个:
添加volumeSlider
属性:
@property (nonatomic, strong) UISlider *volumeSlider;
初始化MPVolumeView
某处添加到您的视图(可以隐藏,没有框架,或空因为showsRouteButton = NO
和showsVolumeSlider = NO
):
MPVolumeView *volumeView = [MPVolumeView new];
volumeView.showsRouteButton = NO;
volumeView.showsVolumeSlider = NO;
[self.view addSubview:volumeView];
查找和储存参考UISlider
:
__weak __typeof(self)weakSelf = self;
[[volumeView subviews] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UISlider class]]) {
__strong __typeof(weakSelf)strongSelf = weakSelf;
strongSelf.volumeSlider = obj;
*stop = YES;
}
}];
添加目标行动UIControlEventValueChanged
:
[self.volumeSlider addTarget:self action:@selector(handleVolumeChanged:) forControlEvents:UIControlEventValueChanged];
,然后在成交量有所改变更新您的自定义控制(即由硬件音量控制):约
- (void)handleVolumeChanged:(id)sender
{
NSLog(@"%s - %f", __PRETTY_FUNCTION__, self.volumeSlider.value);
self.myCustomVolumeSliderView.value = self.volumeSlider.value;
}
以及其他方式:
- (IBAction)myCustomVolumeSliderViewValueChanged:(id)sender {
NSLog(@"set volume to: %f", self.myCustomVolumeSliderView.value);
self.volumeSlider.value = self.myCustomVolumeSliderView.value;
}
注:确保设置self.volumeSlider.value
不循环回设置self.myCustomVolumeSliderView.value
。
希望这可以帮助某人(并且Apple不会从MPVolumeView中删除MPVolumeSlider)。
我想我在Waze应用中看到了这个。我会翻阅。 –
看看这个 - http://stackoverflow.com/questions/10286744/how-to-change-device-volume-on-ios-not-music-volume –
@Paul Pivec如果你找到答案,请分享因为我也在寻找同样的东西。我无法相信苹果有这么愚蠢的限制... – user959631