yon*_*hen 2 camera multithreading objective-c uilabel ios
所以目前我正在iOS上开发相机应用程序.通常,当在屏幕上单击"捕获"按钮时,它将执行以下操作:
UILabel在屏幕上显示"正在保存.."[camManager captureStillImage] //capturing the imageUILabel从屏幕上删除"正在保存.."问题是,"Saving .."标签从未出现在屏幕上.但是,当我删除第3步时,标签实际上会出现在屏幕上,但是在捕获图像之后.
所以根据我的理解,这是因为第2步执行得太快或多线程导致这些步骤不保证按照我编写的顺序执行.它是否正确?
如果是这样,我怎样才能保证此标签在拍摄前出现并在拍摄后立即消失?
- (IBAction)captureImage:(id)sender {
[self showLabel];
[manager captureMultipleImg];
[self hideLabel];
}
Run Code Online (Sandbox Code Playgroud)
你正在阻止主线程.
主线程负责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)