- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在为我的 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/
我使用此函数的目标是返回一个整数,该整数代表用户完成的所有习惯。我的数据库结构是习惯的集合,每个习惯都有一个包含其历史的子集合。下面的函数利用习惯列表,并使用习惯ID来获取该习惯的历史记录。我的问题是
我试图捕捉 AVPlayer 无法继续播放的时刻,以防没有更多媒体可用(网络太慢、信号丢失等)。如文档和不同示例中所述,我正在使用 KVO 来检测: item = [[AVPlayerItem all
我正在使用 npm 包 busboy 来解析多部分表单请求和写入流以将发送的文件写入磁盘。 这适用于小文件,但是当我尝试使用更大的文件 (7MB) 时,似乎只有大约 5MB 被写入磁盘,然后似乎事情停
提供一个最小的代码示例将很困难,但我将提供一些 sudo 代码以希望能够理解要点/问题。 TL;DR:我的工作队列启动,被中断,然后永远不会完成导致 CPU 停顿。 我正在为 PCIe 设备创建网
We are facing an issue on which we need some help. 简要说明: We have enabled SMP in Linux 2.
因此,我已准备好将更新上传到我的其中一个应用程序。一切都正确签名并且验证通过。然而,当尝试将 bundle 上传到 iTunes Store 时,它只是停在(在 XCode Organizer 中
我有一个在 Atmel AT91SAM9260EK 板上运行的嵌入式 Linux 系统,在该板上我有两个以实时优先级运行的进程。管理器进程使用 POSIX 消息队列定期“ping”工作进程以检查工作进
当我尝试运行命令mvn archetype:generate时,它在尝试下载maven-assemble-plugin-2.2-beta-5.jar时停止 无论我取消批处理多少次或关闭cmd并重新启动
我有一个页面正在循环播放 HTML5 视频。当您向下滚动页面时,jQuery 会向 nav 元素添加一个类。然后 CSS 将过渡应用到 th 的 left 属性。在 Firefox 中,它运行良好,但
我是一名优秀的程序员,十分优秀!