2

我试图让我的应用程序在横向和纵向上工作。我在我的所有视图控制器中都安装了正确的方法,并且此代码在 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

4 回答 4

5

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

    UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation;

if (UIDeviceOrientationIsLandscape(deviceOrientation))

{


}

else if (deviceOrientation == UIDeviceOrientationPortrait)

{

}    
于 2011-03-24T01:55:50.517 回答
4

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

UIInterfaceOrientation currentOrientation = 
    [UIApplication sharedApplication].statusBarOrientation;

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

于 2011-03-23T11:58:30.920 回答
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: 上面的方法来确定你是旋转到纵向还是横向。

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

于 2015-04-14T08:15:54.797 回答
-1

利用:

+(bool)isLandscape
{
    return
        !UIDeviceOrientationIsPortrait( [UIDevice currentDevice].orientation ) ||
        !UIInterfaceOrientationIsPortrait( [UIDevice currentDevice].orientation );
}
于 2013-08-23T10:46:27.463 回答