1

アクションの保存についてユーザーに通知するアラートを作成しました。ビューに追加し、画像を保存してアラートを閉じます。しかし、それは私が望んでいた方法で機能していません。以下のコードを見ると、最初にコンソールで「保存されました..」、次に「dispath」が表示されます。私は反対の効果を得たいと思っています。最初に「dispath」を取得してから「保存されました..」(画面にアラートを書き込み、次にバックグラウンドで保存し、最後にアラートを閉じます)。しかし、imageView1 のイメージを変更したので、マージを dispath_async から移動できません。これは UI アクションであるためです。最初に画像をマージし、その後それらを保存する必要があり、このすべての計算時間の前に警告を維持する必要があります。

//adding alert to view
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), 
^{
    dispatch_async(dispatch_get_main_queue(), ^{
        //i want this to complete->
        imageView1.image = [self merge:imageView1.image and:imageView2.image];
        NSLog(@"dispatch");
    });

    //and then to do this action->
    UIImageWriteToSavedPhotosAlbum(imageView1.image, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), nil);
    NSLog(@"saved..");

    dispatch_async(dispatch_get_main_queue(), ^{
        [alert dismissWithClickedButtonIndex:0 animated:YES];
    });
});
4

1 に答える 1

6

dispatch_syncの代わりに単に使用する必要がありdispatch_asyncます。ブロックがメインスレッドで実行されるまで、その関数は戻りません。

于 2011-08-25T07:12:38.757 に答える