UIImagePickerController在iOS 8上拍摄视图旋转异常(图片)

38

我有一个非常简单的应用程序: - 只需在屏幕上点击一个按钮即可允许所有方向 - 按钮显示一个 UIImagePickerController(用于拍照) - 使用 Xcode 5 和 SDK 7 构建

iOS 8 上,UIImagePickerController 的相机无论我处于横向模式还是纵向模式下都正常显示,但当我旋转设备时,相机视图会旋转 90 度,以下是示例:

  1. 我的应用程序处于竖屏模式
  2. 我按下按钮,显示了 UIImagePickerController
  3. 我在相机视图中并进入横屏模式,这就是我得到的:

视图处于横屏模式,但相机旋转了 90 度

是否有其他人遇到过此问题?

PS:如果我再次拍摄照片(同样在横屏模式下),则照片会被正确拍摄,并且现在会正确显示:


编辑

似乎我的 iPad 运行的 iOS 8.1 上修复了此错误,但与该错误相关的内容在 iOS 8.1 发布说明中并未出现:https://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-8.1/

感谢所有人 提供了针对早期 iOS 8 版本的解决方法!


嗨,凯文......你是否在横向模式下启动相机。我所面临的问题是,我的iPhone应用程序处于纵向模式,在一个视图中我有一个相机按钮,我只想以横向模式启动相机。我尝试了谷歌搜索,但没有取得成功。因此,我需要一些想法或一些参考资料,以便我可以将其应用到我的项目中。提前致谢:) - Nilesh Kumar
@wimcNilesh:这个问题不是关于在特定方向启动相机,而是关于相机屏幕方向变化的问题。 - Kevin Hirsch
好的,明白了。谢谢。我还有一个问题要问:“我能在我的 iPhone 应用程序中仅以横向模式启动摄像头吗?其中每个视图都是纵向模式?” - Nilesh Kumar
@wimcNilesh:我不知道。你需要自己去查找答案或者提出问题;) - Kevin Hirsch
没问题,但感谢您的快速回复。 - Nilesh Kumar
请尝试使用此链接,也许能够帮到您:https://dev59.com/V2ox5IYBdhLWcg3wQSIO - gireesh Chanti
12个回答

0

我遇到了同样的问题。我在iOS 7.1.2和iOS 8上进行了测试。到目前为止,它只发生在搭载iOS 8的iPad设备上。所以我通过以下代码暂时解决了这个问题:

// In my app, I subclass UIImagePickerController and code my own control buttons
// showsCameraControls = NO;
- (void)viewWillAppear:(BOOL)animated
{
  [super viewWillAppear:animated];
  [[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
}

不建议这样做,因为它会破坏 presentingViewController 的方向。

苹果公司有回复吗?


1
很遗憾,苹果方面没有回复,而且这个问题在8.0.2更新中仍未得到解决。 - hitme
iOS 8.1 beta也没有 :( - Ray
我的问题已被苹果关闭,因为它是一个重复的问题。 - Kevin Hirsch

0
这是我用来修复应用程序的代码,如果相机以正面朝上的位置启动,则将openCV相机旋转为横向。相机需要被强制进入纵向模式才能使应用程序正常运行。
- (BOOL)shouldAutorotate
 {
    [super shouldAutorotate];
    return NO;
 }

-(void)viewDidAppear:(BOOL)animated
{

    [super viewDidAppear: animated];

    if([[UIDevice currentDevice]orientation] == UIDeviceOrientationFaceUp)
        {
            if([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationLandscapeLeft)
            {
                [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];
            }
            else
            {
                [[UIDevice currentDevice]setValue:[NSNumber numberWithInteger:UIDeviceOrientationPortrait] forKey:@"orientation"];
            }
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接