0

次の効果を達成したい:

  • ユーザーがボタンを押します。
  • VoiceOver は「処理中」の文を読み上げます。
  • いくつかの重い処理を実行します。

すべてがメイン スレッドで実行されており、その間に GUI を更新できるようにしたくありません。そのためには、重い処理が終わる前にメソッドが戻らないようにしてほしい。私は次のコードを持っています:

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

問題は、重い処理が完了した後に VoiceOver が情報を読み上げることです。

メソッドが終了してメインループに制御を返す前に、VoiceOver に情報を「非同期的に」発声させる方法は? 必要に応じて、負荷の高い処理を別のスレッドで実行できます。

4

1 に答える 1

4

これは、メイン スレッドが重い処理を行っている場合、他に何もできず、ボイス オーバー リクエストの開始が含まれるためです。

実際、メイン スレッドで長い処理を実行したくないという意味で、メイン スレッドで発生することがたくさんあります。たとえば、アプリはメモリ不足の警告などの OS からの通知に応答できません。その場合、iOS はアプリがハングしたと考えてアプリを強制終了する可能性があります。

あなたがする必要があるのは、重い処理をバックグラウンド スレッドで実行することです - NSOperationQueue を使用することをお勧めします - そして、それが起こっている間は動作させたくないコントロールを無効にします。

于 2012-08-06T15:01:36.190 に答える