我正在尝试将声音效果添加到添加到UIAlertController的按钮中。我在处理程序中触发声音效果,但这实际上有点晚了。声音会比预期晚0.5秒左右。我希望声音在警报即将解除时立即触发,而不是在解除后触发。使用UIAlertView,可以使用alertWillDismiss而不是alertDidDismiss来处理此问题。 我错过了什么吗?
我采用了Patrick Goley的建议,即继承UIAlertController并重写viewWillDisappear方法。对我来说效果很好。
//
// ImmediateClickAlertController.swift
//
// This subclass of UIAlertController plays a click immediately whenever it is dismissed (i.e. when a button is tapped).
// This fixes an issue when trying to play a click in an attached UIAlertAction, which does not happen until after its view disappears.
import AudioToolbox
class ImmediateClickAlertController: UIAlertController {
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
// play a click
let pressKeySystemSoundID: SystemSoundID = 1104
AudioServicesPlaySystemSound(pressKeySystemSoundID)
}
}
有点小技巧,但也许你可以:
selected
和/或highlighted
属性的任何更改(我的经验是selected
不可靠,而highlighted
是)。 ...但所有这些都相当脆弱,不够优雅,可能会在操作系统的未来版本中崩溃和/或被拒绝进入应用商店...?
因此,你最好的选择(即使是最费力的)是自己编写模态视图控制器: