我正在努力让我的应用程序在横向和纵向上工作。我在所有的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 ******");
}
}
}
答案 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 );
}