UIAlertController に追加されたボタンに効果音を追加しようとしています (...)。ハンドラーで効果音を鳴らしますが、実際には少し遅すぎます。音は0.5秒遅すぎるように発射されます。アラートが解除された後ではなく、アラートが解除されようとしているときにすぐにサウンドを鳴らしたい。UIAlertView では、alertDidDismiss ではなく、alertWillDismiss... を使用してこれを処理できました。
私は何か見落としてますか?
UIAlertController に追加されたボタンに効果音を追加しようとしています (...)。ハンドラーで効果音を鳴らしますが、実際には少し遅すぎます。音は0.5秒遅すぎるように発射されます。アラートが解除された後ではなく、アラートが解除されようとしているときにすぐにサウンドを鳴らしたい。UIAlertView では、alertDidDismiss ではなく、alertWillDismiss... を使用してこれを処理できました。
私は何か見落としてますか?
いいえ、何も見逃していません。あなたが探している機能は、UIAlertController によって提供されていません。独自の表示されたビュー コントローラーを提供することを検討してください。これにより、必要な種類の細かい制御が可能になります。
私は 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
KVO を使用して、そのおよび/またはプロパティの変更を検出しhighlighted
ます (私の経験では、selected
確実に観察できるわけではありませんhighlighted
)。...しかし、これらはすべて非常に壊れやすく、エレガントではなく、OS の将来のリリースで壊れたり、アプリストアから拒否されたりする可能性があります...?
したがって、最良の選択肢は (たとえ最も骨の折れる作業であっても) 独自のモーダル ビュー コントローラーをロールすることです。
上記のドキュメントに従って作成したデモプロジェクト(長い非同期プロセスで使用するための組み込みのカスタム「UIAlertController
そっくり」 ):UIActivityIndicator