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 - 单击以显示文本字段时按钮向上移动?然后搬回去?

使用 swift 代码将 web 视图上的 pdf 共享到其他设备

swift 检查应用程序是否在模拟器或物理iOS设备上运行

UIStackView中的圆形按钮(iOS Swift)

如何检测设备(iphone)是不是有物理主页按钮?