gpt4 book ai didi

ios - Voiceover 使用 UIAccessibilityPostNotification 有巨大的停顿

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:04:43 25 4
gpt4 key购买 nike

我正在为我的 iPhone 游戏添加辅助功能,并广泛使用 UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification, @"string") 来宣布游戏中发生的各种事情。它在 99% 的时间内运行良好,但我遇到了一个问题。

在所有情况下,画外音通告都是通过我添加到应用程序委托(delegate)的单一方法执行的。

- (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];            }        }    }}

存在延迟,所以在游戏中的下一个事件发生之前会说出公告。我找不到更好的方法来确保在某些动画或其他事件中断之前说出整个公告。

除了一种情况外,在调用此方法时会立即发出通知。在一种情况下,在进行讲话之前会有大约 10 秒的停顿。在这种情况下,即使我调试代码并设置断点并手动执行 UIAccessibilityPostNotification 行,该行也会执行但没有任何反应。然后 10 秒后,无需在调试器中执行任何操作,iPhone 就开始播报。

这个公告唯一的特别之处在于它是从一个 touchesEnded: 一个 UIScrollView 的事件中调用的。其他公告是整个游戏循环的一部分,而不是基于触摸事件。

知道什么可能导致画外音将辅助功能通知排队而不是立即说出来吗?

提前致谢,史蒂夫

最佳答案

如果您只能支持 iOS 6 和更高版本,那么您可以使用 UIAccessibilityAnnouncementDidFinishNotification 来确保通知在继续之前完成。

您会像其他任何通知一样观察它

// Observe announcementDidFinish to know when an announcment finishes
// and if it succuded or not.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(announcementFinished:)
name:UIAccessibilityAnnouncementDidFinishNotification
object:nil];

您收到的通知带有公告文本,以及是否已阅读所有文本或公告是否中止。如果您有多个公告,那么您可以等待正确的公告。

// When an announcement finishes this will get called.
- (void)announcementFinished:(NSNotification *)notification {
// Get the text and if it succeded (read the entire thing) or not
NSString *announcment = notification.userInfo[UIAccessibilityAnnouncementKeyStringValue];
BOOL wasSuccessful = [notification.userInfo[UIAccessibilityAnnouncementKeyWasSuccessful] boolValue];

if (wasSuccessful) {
// The entire announcement was read, you can continue.
} else {
// The announcement was aborted by something else being read ...
// Decide what you want to do in this case.
}
}

关于ios - Voiceover 使用 UIAccessibilityPostNotification 有巨大的停顿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8864176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com