乐趣区

关于ios:IOS-监听音量变化监听音量按键及隐藏系统音量UI

监听音量变动

仿佛并没有一种正式的形式能够监听并笼罩掉零碎音量按钮的行为。咱们能够应用的是一个对系统音量变动的事件监听。只须要按如下代码增加上监听即可。

func someInit() {NotificationCenter.default.addObserver(self, selector: #selector(onVolumnChanged), 
        name: Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
}

func onVolumnChanged(noti: Notification) {// do your works}

当任何音量扭转的事件产生时,这个监听都会被触发,据我测试的后果:

  • 按下音量 +- 键
  • 下拉关上控制面板,调节音量
  • 前后摄镜头切换

还好,监听给的 Notification 对象外面提供了一些有用的参数帮咱们辨别出这些状况。能够应用
AVSystemController_AudioVolumeChangeReasonNotificationParameter key 来获取音量扭转的起因。代码如下:

func onVolumnChanged(noti: Notification) {let reason = (noti.userInfo?["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String) ?? ""if reason =="ExplicitVolumeChange" {// 明确的,用户行为的音量扭转,比方按下音量键和下拉控制面板调节音量}
}

暗藏零碎音量 UI

另一个问题是当按下音量按键时,UI 上会主动显示出零碎的音量条,有些业务需要须要暗藏,其实也很简略,只须要在以后的 viewController 外面的某个 view 中增加上 MPVolumeView,而后把它的 frame 设置得屏幕里面,就行了。仿佛零碎会主动找到它,替换掉零碎的音量条,这个只针对以后这个 ViewController 无效。跳转到下一个 ViewController,如果须要屏蔽,也须要独立增加。

let mpVolumeView = MPVolumeView()
mpVolumeView.frame = CGRect(x: -500, y: -500, width: 10, height: 10)
addSubview(mpVolumeView)

如果以上内容对你有所帮忙,请在这些平台上关注我吧,谢谢。o(~▽~)d

退出移动版