2011-08-25 31 views
1

我發出警告通知用戶有關保存操作,我將其添加到查看,保存一些圖像並關閉警報。然而,它並不像我希望的那樣工作。首先在控制檯中查看下面的代碼,我會得到「保存」,然後是「dispath」。我想得到相反的效果首先得到「dispath」,然後「保存」(所以在屏幕上寫入警報,然後保存在後臺,最後解除警報)。但我改變imageView1的形象,所以我不能合併出dispath_async,因爲它的UI操作..如何做到這一點呢?我需要首先合併圖像,然後保存它們以及所有計算時間以保持警惕。Dispatch_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]; 
    }); 
}); 

回答

6

您只需要使用dispatch_sync代替dispatch_async。直到在主線程上執行完該塊後,該函數纔會返回。

+0

我忘了補充一點,我有actionSheet,我點擊按鈕來調用上面的方法。當我使用dispatch_sync actionSheet不隱藏,以便用戶可以看到我的警報(在這種情況下出現在actionSheet菜單下)。 – Vive

+4

對不起,我應該更清楚。你應該仍然使用'dispatch_async(dispatch_get_global_queue ...',但裏面有dispatch_sync(dispatch_get_main_queue ...)。 – jtbandes

+0

這是一個很棒的選擇!Thanks ^^ – Vive