我的应用程序中有一个要求,我需要立即打开相机。
但是,当我来到该ViewController时,打开相机需要花费几秒钟的时间。谁能帮我。
我已经尝试过使用队列块,但这不起作用。
这是我到目前为止尝试过的代码:==
- (void)viewDidLoad {
[super viewDidLoad];
[[NSOperationQueue mainQueue] addOperationWithBlock:^ {
[self onClickCamera:nil];
//Your code goes in here
NSLog(@"Main Thread Code");
}];
// dispatch_async(dispatch_get_main_queue(), ^{
// [self onClickCamera:nil];
// });
// dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", NULL);
// dispatch_async(queue, ^{
// [self onClickCamera:nil];
//
// // Do some computation here.
//
// // Update UI after computation.
// dispatch_async(dispatch_get_main_queue(), ^{
// // Update the UI on the main thread.
// });
// });
}
- (IBAction)onClickCamera:(id)sender
{
NSLog(@"CALeed");
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = NO;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];
}
最佳答案
两个问题:
问题1:
在viewDidLoad中,视图尚未完成渲染其布局。因此,尝试在仍在渲染的视图上呈现某些内容显然会增加延迟。仅在视图完成布局布局后,才会触发演示摄像机。
因此将代码从viewDidLoad
移到viewDidAppear
- (void) viewDidAppear {
[super viewDidAppear];
[self onClickCamera:nil];
}
问题2:
更多的是警告,然后是错误。
为什么连
[NSOperationQueue mainQueue] addOperationWithBlock:
??总是仅在与序列化主队列本身相关联的主线程上调用ViewDidLoad。不必要的上下文切换没有多大意义