MPVolumeSlider的MPVolumeControllerSystemDataSource在iOS 11.4中不可用

今天,我将iOS升级到最新的11.4.要设置系统音量,我使用以下方法.

-(void) setVolumeLevel:(float)val {
    MPVolumeView *slide = [MPVolumeView new];
    UISlider *volumeViewSlider;

    for (UIView *view in [slide subviews]){
        if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
            volumeViewSlider = (UISlider *) view;
        }
    }
    volumeViewSlider.value=val;
}

但是对于11.4,音量没有设定.下面是我打印时的日志.请建议如何在iOS 11.4下设置系统音量

<MPVolumeSlider: 0x1075bc3f0 dataSource: <MPVolumeControllerSystemDataSource: 0x1075be160 not available>

最佳答案 我遇到了同样的问题并通过向我的UIViewController视图添加新的MPVolumeView解决了它,否则它不再设置音量.当我将它添加到控制器时,我还需要将音量视图位置设置为在屏幕之外.

我在这里使用setMaxVolume方法,它可以随时工作,无论你之前是否播放过声音.

代码在Swift 4中:

let volumeControl = MPVolumeView(frame: CGRect(x: 0, y: 0, width: 120, height: 120))

override func viewDidLoad() {
   self.view.addSubview(volumeControl);
}

override func viewDidLayoutSubviews() {
   volumeControl.frame = CGRect(x: -120, y: -120, width: 100, height: 100);
}

func setMaxVolume() {
    let lst = volumeControl.subviews.filter{NSStringFromClass($0.classForCoder) == "MPVolumeSlider"}
    let slider = lst.first as? UISlider

    slider?.setValue(1, animated: false)
}
点赞