【问题标题】:changing and hiding Volume HUD(the overlay of volume) while play music library in iOS 11在 iOS 11 中播放音乐库时更改和隐藏音量 HUD(音量叠加)
【发布时间】:2018-10-23 07:59:01
【问题描述】:

我正在使用MPMusicPlayerController.applicationQueuePlayer来控制播放内部音乐。

extension MPVolumeView {
    var volumeSlider: UISlider? {
        showsRouteButton = false
        showsVolumeSlider = false
        isHidden = true
        for subview in subviews where subview is UISlider {
            let slider =  subview as! UISlider
            slider.isContinuous = false
            slider.value = AVAudioSession.sharedInstance().outputVolume
            return slider
        }
        return nil
    }
}

let player = MPMusicPlayerController.applicationQueuePlayer
player.shuffleMode = .off
player.setQueue(with: MPMediaItemCollection(items: [mediaItem]))
player.play()

let volView = MPVolumeView()
view.addSubview(volView)
UIApplication.shared.keyWindow?.insertSubview(volView, at: 0)
volView.frame.origin.x = -1000

/* I also tried:
MPVolumeView(frame: .zero)
MPVolumeView(frame: CGRect(x: -1000, y: -1000, width: 0, height: 0))
none of them works.
*/

// get the slider to change to volume
let slider = volView.volumeSlider!

// set the volume. when I change, the volume HUD appears. but I want to stop appearing.
slider.setValue(1, animated: false)

我想知道在改变音量时,如何阻止音量HUD弹出?

已编辑。

【问题讨论】:

  • 您找到解决方案了吗?

标签: ios swift volume mpmusicplayercontroller


【解决方案1】:

首先,请注意,完全不支持以这种方式在 MPVolumeView 中进行挖掘,并且不能保证它会在未来的 iOS 版本中工作。 Apple 故意不提供更改主音量的方法。这正是将来可能会转移到单独流程中的那种东西。 Apple 已将许多此类事情转移到单独的流程中。

(我之所以这么说,是因为我与做同样事情的产品在同一条船上,而且我已经工作了一年多来设计一种不需要修改音量的新解决方案。你除非对产品至关重要,否则不想这样做。)

对于您的实际问题,将视图移出屏幕:

if let window = UIApplication.shared.windows.first {
    let volView = MPVolumeView()
    volView.frame = CGRect(x: -window.frame.size.width,
                           y: -window.frame.size.height, 
                           width: window.frame.size.width,
                           height: window.frame.size.height)
    window.addSubview(volView)
}

【讨论】:

  • 我尝试设置 CGRact.zero 和其他 CGPoint。它不起作用。所以我在这里问。
  • @abdelahad 说得对,您需要将视图添加到窗口中。
  • 还是不行。我修改了代码并添加了代码的链接。
  • 忘记了默认框架是CGRectZero,这不起作用。使用已知足够大的框架(整个屏幕)进行更新
  • 嘿,我试过你的更新代码。还是不行。为什么我要指定 iOS 11。因为我认为在 iOS 11 中,苹果改变了一些东西来坚持屏幕上的音量 HUD。因此,您的代码不起作用,这并不让我感到惊讶。
【解决方案2】:

系统体积是用户体验 任何你可以使用它的方式

UIApplication.shared.keyWindow?.insertSubview(MPVolumeView(), at: 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    相关资源
    最近更新 更多