我在iOS 8中使用iPad摄像头时遇到了一个问题。我在测试版中看到了一些旧问题和一个thread on the Apple Developer Forums,但仍然没有找到解决方案。
这个问题似乎有两个部分。
1)当设备方向旋转时,摄像头本身也会旋转,例如世界在它的一侧
2)在Landscape中打开摄像头时,不会出现overlay。当在肖像中打开时,它是好的。
这是一个使用iOS7作为基础SDK的应用,只有在升级到iOS8的设备上运行时才会出现问题。这个应用程序没有使用故事板,它使用的是nibs。
我希望在Xcode5.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的工具栏(位于底部)的布局:

如果我将其更改为“在顶部”,它将同时出现在肖像和风景中!所以它肯定与视图/窗口/某个东西的大小有关,尽管当布局保持不变时,它的行为会发生什么变化是很奇怪的。
我用showsCameraControls = YES和散列OverlayView代码块都试过了,问题#1仍然存在,所以它与app上的覆盖无关。
我希望有人已经找到了这个问题的答案,这似乎是一个很常见的问题。
如果你需要更多的细节,请告诉我。
编辑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上,如果你打开联系人应用程序,编辑联系人并选择“拍照”,同样的问题也会发生--在默认的苹果应用程序中!
我仍然找不到修复方法,所以我现在只是在每次方向改变时销毁并重新创建imagePicker,这很丑陋,但在苹果发布修复程序或出现更好的解决方案之前就足够了。
发布于 2014-10-30 20:14:33
苹果在iOS 8.1中解决了这个问题。
https://stackoverflow.com/questions/25924975
复制相似问题