我正在为我的 iPhone 游戏添加辅助功能,并广泛使用 UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"string") 来宣布游戏中发生的各种事情。它在 99% 的时间内运行良好,但我遇到了一个问题。
在所有情况下,画外音通知都是通过我添加到应用程序委托的单个方法执行的。
- (void)voiceoverAction:(NSString *)speakString 延迟:(NSTimeInterval) 延迟 { if (![[[[UIDevice currentDevice] systemVersion] substringToIndex:1] isEqualToString:@"3"]) { if (UIAccessibilityIsVoiceOverRunning()) { UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, speakString); 如果(延迟> 0){ [NSThread sleepForTimeInterval:delay]; } } } }
延迟是存在的,因此在游戏中的下一个事件发生之前会发出公告。我找不到更好的方法来确保在某些动画或其他事件中断之前说出整个公告。
在任何情况下,当调用此方法时,都会立即发出通知。在一种情况下,在说话之前会有大约 10 秒的停顿。在这种情况下,即使我调试代码并设置断点并手动执行 UIAccessibilityPostNotification 行,该行也会执行但没有任何反应。然后 10 秒后,没有在调试器中做任何事情,iPhone 就开始朗读公告。
这个公告的唯一特别之处是它是从 UIScrollView 的 touchesEnded: 事件调用的。其他公告是整个游戏循环的一部分,并非基于触摸事件。
知道什么可能导致画外音将可访问性通知排队并且不立即说出它吗?
在此先感谢,史蒂夫