VoiceOver在主线程中重处理之前

时间:2012-08-06 14:49:00

标签: objective-c ios accessibility voiceover

我想完成以下效果:

  • 用户按下按钮;
  • VoiceOver大声说出“处理”句子;
  • 进行一些繁重的处理。

一切都在主线程中运行,我不希望GUI能够在那段时间内更新。为此,我希望方法不要在重处理结束之前返回。我有以下代码:

UIAccessibilityPostNotification(UIAccessibilityAnnouncementNotification,
    @"Processing");
heavyProcessing();

问题是,VoiceOver在重度处理完成后会说出信息。

如何让VoiceOver在方法完成并将控制返回主循环之前“异步”说出信息?如有必要,可以在另一个线程中运行繁重的处理。

1 个答案:

答案 0 :(得分:4)

那是因为,如果主线程正在进行繁重的处理,它就无法做任何其他事情,包括发起语音请求。

事实上,主线程上发生了很多事情,这意味着你永远不想对它进行冗长的处理。例如,您的应用无法响应来自操作系统的通知,例如内存不足警告。如果是这种情况,iOS可能会认为它已经挂起了你的应用程序。

你需要做的是在后台线程上运行繁重的处理 - 我建议使用NSOperationQueue - 并禁用你不想在它发生时工作的控件。