首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在iOS 11.4上以编程方式更改卷

如何在iOS 11.4上以编程方式更改卷
EN

Stack Overflow用户
提问于 2018-06-07 17:38:48
回答 4查看 8.1K关注 0票数 10

在此之前,我使用以下方法以编程方式设置音量:

代码语言:javascript
复制
MPVolumeView *volumeView = [[MPVolumeView alloc] init];
UISlider *volumeViewSlider = nil;

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

[volumeViewSlider setValue:0.5 animated:YES];
[volumeViewSlider sendActionsForControlEvents:UIControlEventTouchUpInside];

在iOS 11.4之前,它工作得很好(甚至在iOS 11.3上也是如此),但在iOS 11.4上就不行了,音量值保持不变。有人能帮助解决这个问题吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-07 19:29:17

在小延迟后更改volumeViewSlider.value可以解决问题。

代码语言:javascript
复制
- (IBAction)increase:(id)sender {
  MPVolumeView *volumeView = [[MPVolumeView alloc] init];
  UISlider *volumeViewSlider = nil;

  for (UIView *view in volumeView.subviews) {
    if ([view isKindOfClass:[UISlider class]]) {
      volumeViewSlider = (UISlider *)view;
      break;
    }
  }

  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    volumeViewSlider.value = 0.5f;
  });
}

Swift version

票数 14
EN

Stack Overflow用户

发布于 2018-06-09 05:10:49

我通过向UIViewController视图添加新的MPVolumeView解决了这个问题,否则它将不再设置音量。当我将它添加到控制器中时,我还需要将音量视图位置设置在屏幕之外,以便对用户隐藏它。

我不喜欢使用延迟音量设置,因为它使事情变得更加复杂,特别是如果您需要在设置音量后立即播放声音。

代码在Swift 4中:

代码语言:javascript
复制
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 setVolume(_ volume: Float) {
    let lst = volumeControl.subviews.filter{NSStringFromClass($0.classForCoder) == "MPVolumeSlider"}
    let slider = lst.first as? UISlider

    slider?.setValue(volume, animated: false)
}
票数 4
EN

Stack Overflow用户

发布于 2018-07-15 08:02:36

我只是将MPVolumeView作为子视图添加到另一个视图(该视图从未在屏幕上绘制过)。

在尝试设置或获取音量之前,必须完成此操作。

代码语言:javascript
复制
private let containerView = UIView()
private let volumeView = MPVolumeView()

func prepareWorkaround() {
    self.containerView.addSubview(self.volumeView)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50737943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档