UIImagePicker仅适用于iPhone 6 plus上的前置摄像头

时间:2015-01-20 15:36:00

标签: ios iphone xcode uiimagepickercontroller

使用以下代码:

- (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种不同的解释,其中没有一种解释消息:

快照未呈现的视图会导致空快照。确保在屏幕更新后快照或快照之前,您的视图至少呈现过一次。

1 个答案:

答案 0 :(得分:1)

使用iPhone 6和6 plus时,每次离开相机控制(拾取器)时都必须防止视图重新加载。我的应用程序使用View Controller创建一个动态视图,这是一个表单。该表单上的每个字段都从Web服务中提取,并成为表单的子视图。这包括相机字段,我使用viewcontroller和xib来构建字段。表单视图通过drawRect方法构建整个表单。每次导航时,摄像机字段都会尝试调用该方法。我阻止它重新加载,似乎已经解决了这个问题。

更标准的应用可以在主视图控制器的viewDidAppear方法中动态创建相机字段。如果您将主视图控制器设置为摄像机字段的委托,则当它远离拾取器导航时仍将调用viewDidAppear。必须防止这种情况,否则你将丢失图像。

这里真正有趣的是,这只发生在iPhone 6和6 plus上。所有其他设备都不会尝试重新加载视图...转到图。