旋转视图时,UIInterfaceOrientationIsLandscape不会触发

时间:2011-03-23 11:51:30

标签: iphone ipad uiview rotation uiinterfaceorientation

我正在努力让我的应用程序在横向和纵向上工作。我在所有的viewcontrollers中安装了正确的方法,这个代码在ipad模拟器旋转时触发,但总是触发纵向。横向IF子句永远不会被触发。我能做错什么?

-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)InterfaceOrientation {
NSLog(@"******* ROTATING ******");
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) {

        NSLog(@"ROTATING View Landscape ******");

    } else    if(UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {

        NSLog(@"ROTATING View Portrait ******");

    }
} 

}

4 个答案:

答案 0 :(得分:5)

设备和界面方向似乎是不同的东西。我在Apple的网站上找到了使用UIDeviceOrientation执行此操作的方法。使用此测试,当我旋转模拟器和我的ipad设备时,我得到了正确的触发器。

    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;

if (UIDeviceOrientationIsLandscape(deviceOrientation))

{


}

else if (deviceOrientation == UIDeviceOrientationPortrait)

{

}    

答案 1 :(得分:4)

我发现检测iPhone / iPad当前设备方向的最可靠方法是使用statusBarOrientation属性,如下所示:

UIInterfaceOrientation currentOrientation = 
    [UIApplication sharedApplication].statusBarOrientation;

如果您使用它代替self.interfaceOrientation,您的代码是否有效?

答案 2 :(得分:0)

这是我在swift for i中的代码:

override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {

    let  deviceOrientation:UIDeviceOrientation = UIDevice.currentDevice().orientation

    if (UIDeviceOrientationIsPortrait(deviceOrientation)){
        let value = UIInterfaceOrientation.LandscapeLeft.rawValue
        UIDevice.currentDevice().setValue(value, forKey: "orientation")
    }
}

viewWillTransitionToSize:withTransitionCoordinator:上面的方法,以确定您是否正在旋转为纵向或横向。

当检测到人像模式时,我的代码基本上会将方向更改回横向模式。

答案 3 :(得分:-1)

使用:

+(bool)isLandscape
{
    return
        !UIDeviceOrientationIsPortrait( [UIDevice currentDevice].orientation ) ||
        !UIInterfaceOrientationIsPortrait( [UIDevice currentDevice].orientation );
}