有没有办法专门检测按钮按下,而不是音量变化事件。我尝试关注这两篇文章,但它们检测到音量变化而不是按下按钮:
我不能使用这两个事件的原因是我的应用程序会在某些事件期间自动调整音量。当应用程序执行此操作时,它与用户手动按下音量按钮时的事件不同。
所以我要做的是订阅通知,就像他们在你链接的问题中所做的那样,然后添加一个名为 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
}
}
}
Run Code Online (Sandbox Code Playgroud)