0

我想完成以下效果:

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

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

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

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

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

4

1 回答 1

4

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

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

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

于 2012-08-06T15:01:36.190 回答