Swift:监听 iOS 设备上的物理按钮向上/向下事件
Posted
技术标签:
【中文标题】Swift:监听 iOS 设备上的物理按钮向上/向下事件【英文标题】:Swift: Listen to physical button up/down events on iOS device 【发布时间】:2020-01-20 17:11:05 【问题描述】:我想在用户按下任一音量按钮时执行一个操作,当他们停止按下它时执行另一个操作,类似于我可以通过覆盖 touchesBegan()
和 touchesEnded
来执行的操作。
我知道我可以像这样列出音量级别的变化:
NotificationCenter.default.addObserver(self, selector: #selector(volumeChanged), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
@objc func volumeChanged(notification: NSNotification)
if let userInfo = notification.userInfo
if let volumeChangeType = userInfo["AVSystemController_AudioVolumeChangeReasonNotificationParameter"] as? String
// do something here, such as a switch based off of "volumeChangeType"
但是,一旦用户将音量调高或调低,就不会再触发事件。此外,当用户停止按下按钮时,不会触发任何事件。这是有道理的,因为我实际上是在听音量变化事件,而不是音量按钮按下事件。
有没有办法在 iOS 中监听物理按钮按下?
【问题讨论】:
一种选择可能是以编程方式将音量更改为与用户相反的方向,以便事件在按钮按下的整个持续时间内持续触发,然后使用计时器设置超时,当音量变化事件未在 X 毫秒内触发。但是,感觉很脏…… 你试过了吗:***.com/a/28474014/12555191 @DrewG23 现在正试图让它发挥作用,但这不正是我已经在做的事情吗,仅使用NotificationCenter
?
【参考方案1】:
看看这个GitHub Repo,它似乎提供了您所要求的一切。
【讨论】:
是的,我应该将其添加到我的问题中。我希望可能有一些内置机制,因为我不太热衷于依赖两年 (JPSVolumeButtonHandler) 和三年 (PhysicalButton) 年未触及的 pod。我可能必须手动集成此代码。 我也真的不确定这些类在哪里处理释放音量按钮,我只看到按下音量增大和按下音量的挂钩,除非我误读了? github.com/jpsim/JPSVolumeButtonHandler/blob/master/…以上是关于Swift:监听 iOS 设备上的物理按钮向上/向下事件的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 8.1 之后,在所有设备上,当点击 alertview 取消按钮时,ScrollView 向上并且不滚动
Swift,iOS - 单击以显示文本字段时按钮向上移动?然后搬回去?