2

現在、私はiOSのカメラアプリに取り組んでいます。一般に、画面で「キャプチャ」ボタンをクリックすると、次のことが行われます。

  1. 画面UILabelに「保存中…」と表示
  2. [camManager captureStillImage] //capturing the image
  3. UILabel画面から「保存中..」を削除

問題は、「保存中..」というラベルが画面に表示されないことでした。しかし、ステップ 3 を削除すると、実際にはラベルが画面に表示されますが、画像をキャプチャした後です。

したがって、私の理解に基づいて、これはステップ 2 の実行が速すぎたか、これらのステップが私が書いた順序で実行されることが保証されていないマルチスレッドが原因で発生しました。これは正しいです?

もしそうなら、このラベルがキャプチャの直前に表示され、キャプチャの直後に消えることをどのように保証できますか?


コード

- (IBAction)captureImage:(id)sender {

     [self showLabel];

     [manager captureMultipleImg];

     [self hideLabel];
}
4

1 に答える 1

6

メインスレッドをブロックしています。

メインスレッドは UI を担当します。おそらくそうであるように、長い操作を行っている場合[manager captureMultipleImg];、UI は更新されません。このような場合、マルチスレッドを使用する必要があります。

ここで使用できGCDます:

- (IBAction)captureImage:(id)sender {
    [self showLabel];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
    ^{
        [manager captureMultipleImg];

        // Dispatch back on main for UI stuff
        dispatch_async(dispatch_get_main_queue(), ^{
            [self hideLabel];
        });
    });
}
于 2013-10-31T08:59:07.383 に答える