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 上。所有其他设备都不会尝试重新加载视图...请看图。
使用以下代码:
- (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 上。所有其他设备都不会尝试重新加载视图...请看图。