我想实现以下效果:
- 用户按下按钮
- VoiceOver大声说出一个"处理"句子
- 正在执行一些繁重的处理
所有的东西都在主线程中运行,我不希望GUI在那个时候能够更新。为此,我希望该方法在重处理结束之前不要返回。我有以下代码:
UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,
@"Processing");
heavyProcessing();
问题是,VoiceOver在完成大量处理后会说出信息。
在方法完成并将控制返回到主循环之前,如何使VoiceOver"异步"说出信息?如果必要,可以在另一个线程中运行繁重的处理。
这是因为,如果主线程正在进行繁重的处理,它就不能做任何其他事情,这将包括启动语音请求。
事实上,主线程上发生了很多事情,这意味着你永远不想对它进行长时间的处理。例如,你的应用程序无法响应操作系统的通知,比如内存不足警告。如果是这样的话,iOS可能会在你的应用程序挂起时杀死它。
你需要做的是在后台线程上运行你的重处理——我建议使用NSOperationQueue——并禁用你不想在它发生时工作的控件。