有没有办法专门检测按钮按下,而不是音量变化事件。我尝试了这两个帖子,但他们检测到音量变化而不是按下按钮:
Cleanest way of capturing volume up/down button press on iOS8
swift detect volume button press
我无法使用这两个事件的原因是因为我的应用会在某些事件期间自动调整音量。当应用程序执行此操作时,它与用户手动按下音量按钮时的事件不同。
答案 0 :(得分:3)
所以我要做的就是订阅通知,就像他们在您链接的问题中所做的那样,然后添加一个名为programmaticVolumeChange的变量。当您以编程方式将变量设置为true时,然后在函数observeValueForKeyPath中,如果变量为true,则不取消警报(并在之后自然将其设置为false)。这样,当用户按下音量按钮时,您知道它不是您的代码。也许测试程序化音量变化和函数调用之间的时间量,但我认为没问题。
例如
var programmaticVolumeChange = false
func changeVolumeProgramatically() {
programmaticVolumeChange = true
//change volume programmatically after
}
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject,
change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) {
if keyPath == "outputVolume"{
if programmaticVolumeChange {
programmaticVolumeChange = false
} else {
//handle logic for user volume button press
}
}
}