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

UIImagePicker only works with front camera on iPhone 6 plus

使用以下代码:

- (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;

我失去了形象。以下代码是我捕获图像并在我的应用程序中设置图像视图的方式。我使用导航控制器 return 到应用程序:

- (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 种不同的解释 none 其中删除了消息:

对尚未呈现的视图进行快照会生成空快照。确保您的视图在屏幕更新之前或快照之前至少渲染过一次。

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

更标准的应用程序可能会在主视图控制器的 viewDidAppear 方法中动态创建相机字段。如果您将主视图控制器设置为相机字段的委托,它在离开选择器时仍会调用 viewDidAppear。必须避免这种情况,否则您将失去形象。

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