对于旧项目,相机在iOS8测试版中无法正常旋转

时间:2014-08-05 12:48:43

标签: objective-c uiimagepickercontroller ios8 uideviceorientation xcode6

我正在使用旧的X-Code版本创建的iOS应用程序,因此它在MainWindow.xib中有窗口。 最近,当我在iOS8 Beta版本中运行这个项目时,我遇到了一个问题:窗口没有横向旋转。所以我在MainWindow.xib中添加了另一个窗口。我做了条件来检查操作系统版本,对于旧的iOS版本我使用以前创建的窗口但是对于iOS8我使用新添加的窗口进行横向定位。我已经解决了这个问题。除相机外,整个应用程序都正常工作。

以下是截图。

在LandscapeMode中(它正常工作): enter image description here

在PortraitMode中(加载相机后,我已旋转它,此处其他控件正在旋转,但相机过度旋转不正常):

enter image description here

在横向模式下装入相机后,我已旋转设备,控件正在旋转,但相机屏幕未旋转,仍处于纵向模式。 这可能是由于Appdelegate中的窗口。

对此有何解决方案?

提前致谢。

3 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。
我曾尝试使用cameraViewTransform。

下面

#import "MyUIImagePickerController.h"

@implementation MyUIImagePickerController

bool rotateFlg = false;
UIInterfaceOrientation startupOrientation;

-(id)init{
    startupOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    return [super init];
}

-(NSUInteger)supportedInterfaceOrientations {
    // iOS 8
    if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) {
        float lotate[4];
        if (startupOrientation == UIInterfaceOrientationLandscapeRight || startupOrientation == UIInterfaceOrientationLandscapeLeft) {
            lotate[0] = 90.0f;
            lotate[1] = -90.0f;
            lotate[2] = 180.0f;
            lotate[3] = 0.0f;
        } else {
            lotate[0] = 0.0f;
            lotate[1] = 180.0f;
            lotate[2] = 90.0f;
            lotate[3] = -90.0f;
        }

        UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
        if(orientation ==UIInterfaceOrientationPortrait ){
            CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[0] * M_PI / 180.0f);
            self.cameraViewTransform = __rotation;
            rotateFlg = true;
        }
        else if(orientation == UIInterfaceOrientationPortraitUpsideDown){
            CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[1] * M_PI / 180.0f);

            self.cameraViewTransform = __rotation;
            rotateFlg = true;
        } else if(orientation == UIInterfaceOrientationLandscapeLeft){
            if (rotateFlg) {
                CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[2] * M_PI / 180.0f);
                self.cameraViewTransform = __rotation;
                rotateFlg = false;
            }
        }else if(orientation == UIInterfaceOrientationLandscapeRight){
            if (rotateFlg) {
                CGAffineTransform __rotation = CGAffineTransformMakeRotation(lotate[3] * M_PI / 180.0f);
                self.cameraViewTransform = __rotation;
                rotateFlg = false;
            }
        }
    }
    return UIInterfaceOrientationMaskAll;
}
@end

似乎工作了 但来源并不美丽......

答案 1 :(得分:1)

发布了我认为是解决方案的内容; https://stackoverflow.com/a/26934067/782533

看起来像是同一个问题?不确定我是否应该链接或复制/粘贴,所以无论如何都是这样;

我遇到了同样的问题,在回到基础并创建一个实际工作的新项目之后......我追踪到了它;

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    // Had forgot to call the following..
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

希望它有所帮助。

答案 2 :(得分:0)

根据this thread on Apple Dev forums,iOS8 / XCode6中的旋转在使用XIB时有一些问题,但在使用Storyboard时却没有。