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 回答