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

yon*_*hen 2 camera multithreading objective-c uilabel ios

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

  1. UILabel在屏幕上显示"正在保存.."
  2. [camManager captureStillImage] //capturing the image
  3. UILabel从屏幕上删除"正在保存.."

问题是,"Saving .."标签从未出现在屏幕上.但是,当我删除第3步时,标签实际上会出现在屏幕上,但是在捕获图像之后.

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

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


- (IBAction)captureImage:(id)sender {

     [self showLabel];

     [manager captureMultipleImg];

     [self hideLabel];
}
Run Code Online (Sandbox Code Playgroud)

NSA*_*ict 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];
        });
    });
}
Run Code Online (Sandbox Code Playgroud)