我需要根据方向更改视图的图像背景。为此,我在viewWillAppear
中使用statusBarOrientation方法:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
UIInterfaceOrientation currentOrientation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(currentOrientation)) {
NSLog(@"PORTRAIT");
} else if (UIInterfaceOrientationIsLandscape(currentOrientation)) {
NSLog(@"LANDSCAPE");
}
}
问题是,即使iPad处于横向模式,控制台也始终显示PORTRAIT。 viewDidAppear
中的相同代码正常工作,但为时已晚,用户可以看到图像的更改。这让我觉得statusBarOrientation的正确状态在viewWillAppear
中仍然不可用,但我在其他一些问题中已经读过这段代码应该在那里工作。
答案 0 :(得分:12)
尝试
int type = [[UIDevice currentDevice] orientation];
if (type == 1) {
NSLog(@"portrait default");
}else if(type ==2){
NSLog(@"portrait upside");
}else if(type ==3){
NSLog(@"Landscape right");
}else if(type ==4){
NSLog(@"Landscape left");
}
答案 1 :(得分:3)
您不应该使用statusBarOrientation来确定应用程序的当前方向。根据Apple的文档:http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIApplication_Class/Reference/Reference.html
此属性的值是一个常量,表示接收者状态栏的方向。有关详细信息,请参阅UIInterfaceOrientation。设置此属性会将状态栏旋转到指定的方向,而不会设置过渡动画。但是,如果您的应用程序具有可旋转的窗口内容,则不应使用此方法任意设置状态栏方向。如果设备更改方向,则此方法设置的状态栏方向不会更改。
尝试使用UIViewController的 interfaceOrientation 属性来获取当前应用程序的方向。
答案 2 :(得分:0)
以下是用于记录设备的interfaceOrientation的有用代码段:
NSArray* orientations = @[ @"nothing", @"UIInterfaceOrientationPortrait", @"UIInterfaceOrientationPortraitUpsideDown", @"UIInterfaceOrientationLandscapeLeft", @"UIInterfaceOrientationLandscapeRight”];
NSLog(@"Current orientation := %@", orientations[self.interfaceOrientation]);
希望这可以帮助别人!