私はiPhoneゲームにアクセシビリティを追加し、UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification、@ "string")を多用して、ゲームで起こっているさまざまなことをアナウンスしています。99%の時間でうまく機能しますが、問題が1つあります。
すべての場合において、ナレーションのアナウンスは、アプリケーションデリゲートに追加した単一のメソッドから実行されます。
-(void)voiceoverAction:(NSString *)speakString delay:(NSTimeInterval)delay { if(![[[[UIDevice currentDevice] systemVersion] substringToIndex:1] isEqualToString:@ "3"]){ if(UIAccessibilityIsVoiceOverRunning()){ UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification、speakString); if(delay> 0){ [NSThread sleepForTimeInterval:delay]; } } } }
ゲームで次のイベントが発生する前にアナウンスが話されるように、遅延があります。アニメーションやその他のイベントでアナウンスが途切れる前に、アナウンス全体が確実に話されるようにするためのより良い方法を見つけることができませんでした。
1つを除くすべての場合で、このメソッドが呼び出されるとすぐにアナウンスが発声されます。あるケースでは、スピーキングが実行される前に約10秒の休止があります。この場合、コードをデバッグしてブレークポイントを設定し、UIAccessibilityPostNotification行を手動で実行しても、行は実行されますが、何も起こりません。それから10秒後、デバッガーで何もせずに、iPhoneはアナウンスを話し始めます。
この1つのアナウンスの唯一の特別な点は、それがtouchesEnded:UIScrollViewのイベントから呼び出されることです。その他のアナウンスはゲームループ全体の一部であり、タッチイベントに基づくものではありません。
ナレーションがアクセシビリティ通知をキューに入れ、すぐに話さない原因となる可能性があるアイデアはありますか?
よろしくお願いします、スティーブ