什么是View Hierarchy?如何向其中添加MPVolumeView组件?
MPVolumeView 正确实现方案
核心问题原因
你当前代码里的myView定义在ViewController类外部,没有被添加到当前控制器的视图层级中,因此挂载在它内部的MPVolumeView自然不会显示。
官方文档提到的「嵌入View Hierarchy」,指的是需要将MPVolumeView或它的父容器,添加到当前页面控制器的视图子节点中,可通过Storyboard拖入或者代码调用addSubview实现。
实现方案1:基于Storyboard(匹配官方文档说明)
- 打开Main.storyboard,在当前ViewController的页面视图上拖入一个普通UIView,自行调整位置和尺寸,作为MPVolumeView的承载容器
- 给这个承载UIView绑定IBOutlet到ViewController类中,变量命名为
mpVolumeViewParentView - 在
viewDidLoad方法中添加如下代码:
override func viewDidLoad() { super.viewDidLoad() // 初始化MPVolumeView,尺寸和承载容器保持一致 let volumeView = MPVolumeView(frame: mpVolumeViewParentView.bounds) // 若只需要声道选择功能,可打开下行注释隐藏音量滑块 // volumeView.showsVolumeSlider = false volumeView.autoresizingMask = [.flexibleWidth, .flexibleHeight] mpVolumeViewParentView.addSubview(volumeView) }
实现方案2:纯代码实现(无需修改Storyboard)
直接在viewDidLoad方法中创建并添加到当前控制器视图即可:
override func viewDidLoad() { super.viewDidLoad() // 创建MPVolumeView的承载容器 let volumeParentView = UIView(frame: CGRect(x: 20, y: 100, width: view.bounds.width - 40, height: 40)) volumeParentView.backgroundColor = .clear view.addSubview(volumeParentView) // 挂载MPVolumeView let volumeView = MPVolumeView(frame: volumeParentView.bounds) volumeView.autoresizingMask = [.flexibleWidth, .flexibleHeight] volumeParentView.addSubview(volumeView) }
注意:iOS模拟器不会渲染MPVolumeView的路由选择(含声道选择)按钮,必须使用真机调试才能看到完整组件效果。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

