如何在iOS编程中保留方法执行的顺序?

时间:2013-10-31 08:54:41

标签: ios objective-c multithreading camera uilabel

所以目前我正在iOS上开发相机应用程序。通常,当在屏幕上单击“捕获”按钮时,它将执行以下操作:

  1. 在屏幕上显示UILabel“正在保存..”
  2. [camManager captureStillImage] //capturing the image
  3. 从屏幕上删除UILabel“正在保存..”
  4. 问题是,“Saving ..”标签永远不会出现在屏幕上。但是,当我删除第3步时,标签实际上会出现在屏幕上,但是在捕获图像之后。

    因此,根据我的理解,这是因为第2步执行得太快或多线程导致这些步骤无法保证按照我编写的顺序执行。它是否正确?

    如果是这样,我怎样才能保证此标签在拍摄前出现并在拍摄后立即消失?


    代码

    - (IBAction)captureImage:(id)sender {
    
         [self showLabel];
    
         [manager captureMultipleImg];
    
         [self hideLabel];
    }
    

1 个答案:

答案 0 :(得分:5)

你正在阻止主线程。

主线程负责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];
        });
    });
}