我在 iOS 8 中使用 iPad 相机时遇到了问题。我在测试期间在 Apple 开发者论坛上看到了一些较旧的问题和一个帖子,但仍未找到解决方案。
这个问题似乎有两个部分。
1)当设备方向旋转时,相机本身也会旋转,例如世界在它的一侧
2) 在横向打开相机时,不会出现叠加层。在纵向打开时它很好。
这是一个使用iOS7作为Base SDK的应用程序,只有在升级到iOS8的设备上运行该应用程序时才会出现问题。该应用程序没有使用情节提要,它使用的是笔尖。
我希望先用 Xcode 5.1.1 推出一个修复程序,然后再转向 iOS8 特定的修复程序并在下一个版本中将其用作 Base SDK。
这是我调出相机的代码:
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera] == YES) {
// Create Camera
imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.delegate = self;
imagePicker.showsCameraControls = NO;
// Set up custom controls view
[[NSBundle mainBundle] loadNibNamed:@"OverlayView" owner:self options:nil];
self.overlayView.frame = imagePicker.cameraOverlayView.frame;
imagePicker.cameraOverlayView = self.overlayView;
self.overlayView = nil;
// Show Camera
[self presentViewController:imagePicker animated:NO completion:nil];
[imagePicker release];
}
我也试过
以及 OverlayView 的 Toolbar 的布局(位于底部):
如果我将其更改为“位于顶部”,它会同时出现在纵向和横向中!所以它必须与视图/窗口/某些大小有关,尽管当布局保持不变时它的行为会如何变化很奇怪。
我已经尝试过两者showsCameraControls = YES
并散列出OverlayView
块,问题#1仍然存在,所以它与应用程序的覆盖无关。
我希望有人找到了答案,这似乎是一个很常见的问题。
如果您需要更多详细信息,请告诉我。
编辑 1:修复了覆盖(问题 #2)
它没有将方向应用于 OverlayView,像这样修复它:
// Grab the window frame and adjust it for orientation - from http://stackoverflow.com/a/15707997/520902
UIView *rootView = [[[UIApplication sharedApplication] keyWindow]
rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect screenFrame = [rootView convertRect:originalFrame fromView:nil];
...
self.overlayView.frame = imagePicker.cameraOverlayView.frame;
我怀疑这与相机没有意识到它的方向有关,将继续寻找解决问题 #1 的方法。
编辑 2:关于问题 #1 的更新
看起来相机旋转可能是苹果的问题。在 iOS8 上,如果您打开联系人应用程序,编辑联系人并选择“拍照”,则会出现完全相同的问题 - 在默认的 Apple 应用程序中!
我仍然找不到修复程序,所以我现在只是破坏并重新创建imagePicker
每个方向更改,这很丑陋,但在 Apple 发布修复程序或出现更好的解决方案之前就足够了。