在iOS 8中,我有从相机捕捉图像的问题,直到现在我正在使用这段代码

UIImagePickerController *controller=[[UIImagePickerController alloc] init];
controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
controller.delegate=(id)self;
controller.sourceType=UIImagePickerControllerSourceTypeCamera;
[self presentViewController:controller animated:YES completion:nil];

但在iOS 8中,我得到了这个:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

我已经尝试了本文提供的解决方案

@property (strong,nonatomic)UIImagePickerController *controller;

_controller=[[UIImagePickerController alloc] init];
_controller.videoQuality=UIImagePickerControllerQualityTypeMedium;
_controller.delegate=(id)self;
_controller.sourceType=UIImagePickerControllerSourceTypeCamera;
_[self presentViewController:controller animated:YES completion:nil];

...
controller.modalPresentationStyle=UIModalPresentationFullScreen;
or
controller.modalPresentationStyle=UIModalPresentationCurrentContext;
...

double delayInSeconds = 0.1;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    [self presentViewController:controller animated:YES completion:nil];
});

[self presentViewController:controller animated:YES completion:NULL];

[self presentViewController:controller animated:YES completion:^{

}];

任何想法?


当前回答

我使用Phonegap,但这个线程一直作为第一个当谷歌关于错误消息。

对我来说,通过将imagetype定义为PNG,这个问题就消失了。

encodingType : Camera.EncodingType.PNG

所以整条线是:

 navigator.camera.getPicture(successFunction, failFunction, { encodingType : Camera.EncodingType.PNG, correctOrientation:true, sourceType : Camera.PictureSourceType    .PHOTOLIBRARY, quality: 70, allowEdit : false , destinationType: Camera.DestinationType.DATA_URL});

你的里程可能会有所不同,但这对我来说很管用。

其他回答

我有一个UIAlertControllerStyleActionSheet给用户一个选项,用相机拍照或使用一个从库。

我在错误消息上尝试了一个符号断点

这表明错误是由演示期间实习生使用UICollectionView产生的

[self presentViewController:alert animated:YES completion:nil];

我通过在呈现前明确设置框架来解决这个问题

[alert setPreferredContentSize: alert.view.frame.size];

这里是完整的方法,是工作没有错误

-(void)showImageSourceAlertFromSender:(id)sender{
UIButton *senderButton = (UIButton*)sender;
UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault
                                                     handler:^(UIAlertAction *action) {
                                                         [self takePhoto];
                                                     }];
UIAlertAction *libraryAction = [UIAlertAction actionWithTitle:@"Library" style:UIAlertActionStyleDefault
                                                      handler:^(UIAlertAction *action) {
                                                          [self selectPhotoFromLibraryFromSender:sender];
                                                      }];
[alert addAction:cameraAction];
[alert addAction:libraryAction];
alert.popoverPresentationController.delegate = self;
alert.popoverPresentationController.sourceRect = senderButton.frame;
alert.popoverPresentationController.sourceView = self.view;

[alert setPreferredContentSize: alert.view.frame.size];

[self presentViewController:alert animated:YES completion:^(){
}];}

我也遇到了同样的问题,我通过检查相机是否可用来解决它:

BOOL cameraAvailableFlag = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    if (cameraAvailableFlag)
        [self performSelector:@selector(showcamera) withObject:nil afterDelay:0.3];

这可能是内置ImagePickerController的错误。我的代码可以运行,但在iPhone 6 Plus上偶尔会崩溃。

我已经尝试了其他答案提出的所有解决方案,但都没有运气。问题最终解决后切换到JPSImagePickerController。

我在这个问题上挣扎了几个小时,我阅读了每一个相关的主题,发现这个错误是因为我的设备的隐私设置下,我的应用程序的摄像头访问被阻止了!!我从来没有拒绝访问相机,我不知道它是如何被阻止的,但这就是问题所在!

我使用Phonegap,但这个线程一直作为第一个当谷歌关于错误消息。

对我来说,通过将imagetype定义为PNG,这个问题就消失了。

encodingType : Camera.EncodingType.PNG

所以整条线是:

 navigator.camera.getPicture(successFunction, failFunction, { encodingType : Camera.EncodingType.PNG, correctOrientation:true, sourceType : Camera.PictureSourceType    .PHOTOLIBRARY, quality: 70, allowEdit : false , destinationType: Camera.DestinationType.DATA_URL});

你的里程可能会有所不同,但这对我来说很管用。