iOS 7 UIImagePicker预览黑屏

use*_*024 26 objective-c uiimagepickercontroller ios

当我尝试从我的代码加载相机时,相机预览为黑色.如果我等待10-20秒,它将显示真实的相机预览.我发现了几个问题,其中一些问题表明在后台运行其他代码应该是这个问题的原因.但是我没有在后台运行任何代码.我该怎么解决这个问题?

这是我运行相机的代码

UIImagePickerController *photoPicker = [[UIImagePickerController alloc] init];

photoPicker.delegate = self;
photoPicker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:photoPicker animated:YES completion:NULL];
Run Code Online (Sandbox Code Playgroud)

eck*_*ero 21

大约5个月前,我的团队在iOS7中发现了UIImageViewController的内存泄漏.每个实例化都以指数方式减慢app的速度(即第一个alloc-init延迟1秒,第二个延迟2秒,第三个延迟5秒).最终,我们有30-60个延迟(类似于你正在经历的).

我们通过继承UIImagePickerController并使其成为Singleton解决了这个问题.这样它只被初始化一次.现在我们的延迟很小,我们避免泄漏.如果子类化不是一个选项,请在viewController中尝试一个类属性,然后像这样延迟加载它.

-(UIImagePickerController *)imagePicker{
    if(!_imagePicker){
        _imagePicker = [[UIImagePickerController alloc]init];
        _imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    }
    return _imagePicker;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以稍后再称它为:

[self presentViewController:self.imagePicker animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)


dav*_*ryn 2

我自己也有过这种情况 - 如果主调度线程上正在运行某些东西,就会发生这种情况 - 您是否有机会调整图像大小?

它将预览放在主线程上,如果有东西正在使用它,您会看到黑屏。这是一个错误,解决方法是接管主线程或禁用照片选择器,直到队列空闲