使用以下代码:
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (!self.alreadyAppeared) {
[self performSelector:@selector(showCamera) withObject:nil afterDelay:0.3];
}
}
-(void)showCamera
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = YES;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
picker.delegate = self;
[self presentViewController: picker animated:YES completion:NULL];
}
我的应用程序完美无缺。但是如果我改变了
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
到
picker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
我丢失了图片。以下代码是我如何捕获图像并在我的应用程序中设置imageview。我使用Nav控制器返回应用程序:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
UIImage *chosenImage = info[UIImagePickerControllerOriginalImage];
self.cf.imageView.image = chosenImage;
NSLog(@"%@",chosenImage);
[picker dismissViewControllerAnimated:YES completion:NULL];
// pop back to previous controller
NSArray *myControllers = self.nc.viewControllers;
int previous = (int)myControllers.count - 2;
UIViewController *previousController = [myControllers objectAtIndex:previous];
[self.nc popToViewController:previousController animated:YES];
}
同样,这在我的iPad上运行得很好,使用前置摄像头也能正常工作。即使使用后置摄像头,所选图像(我记录的)也显示正确。有没有人知道为什么后置摄像头设置会有这样的效果?
另一个项目:我收到这条非常令人恼火的消息,其中包含大约1,000种不同的解释,其中没有一种解释消息:
快照未呈现的视图会导致空快照。确保在屏幕更新后快照或快照之前,您的视图至少呈现过一次。
答案 0 :(得分:1)
使用iPhone 6和6 plus时,每次离开相机控制(拾取器)时都必须防止视图重新加载。我的应用程序使用View Controller创建一个动态视图,这是一个表单。该表单上的每个字段都从Web服务中提取,并成为表单的子视图。这包括相机字段,我使用viewcontroller和xib来构建字段。表单视图通过drawRect方法构建整个表单。每次导航时,摄像机字段都会尝试调用该方法。我阻止它重新加载,似乎已经解决了这个问题。
更标准的应用可以在主视图控制器的viewDidAppear方法中动态创建相机字段。如果您将主视图控制器设置为摄像机字段的委托,则当它远离拾取器导航时仍将调用viewDidAppear。必须防止这种情况,否则你将丢失图像。
这里真正有趣的是,这只发生在iPhone 6和6 plus上。所有其他设备都不会尝试重新加载视图...转到图。