我的应用程序中有一个要求,我需要立即打开相机。
但是,当我来到该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。不必要的上下文切换没有多大意义

09-11 20:43