IOS,如何在启动时获取设备方向或viewDidAppear

时间:2014-02-28 16:46:43

标签: ios objective-c ipad screen-orientation

我有一个应用程序,根据方向显示不同的图像......我一直在使用:

UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]);

看看它是否是landsCape ...但是如果我在rootViewController中调用它:viewDidLoadviewWillAppearviewDidAppear它总是假的......那么我通过比较具有autosizeMask的框架的宽度和高度来尝试数字,如果它的landsCape或没有,所以它总是全屏...它的滚动视图,我做了以下:

BOOL landscape = self.frame.size.width>self.frame.size.height;

但这也不起作用(总是假的),因为此时视图仍然有纵向视图的框架。

4 个答案:

答案 0 :(得分:3)

不使用设备方向,而是检查界面方向。这些宏可以帮到你。

#define IS_PORTRAIT     UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])
#define IS_LANDSCAPE    UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])

答案 1 :(得分:2)

您应该在viewWillLayoutSubviews中进行布局。此时,视图控制器的视图frame将被正确设置。

使用orientation属性是错误的。来自文档:

  

属性的值是一个常量,表示设备的当前方向。此值表示设备的物理方向,可能与应用程序用户界面的当前方向不同。

相反,您可能希望使用[UIApplication sharedApplication].statusBarOrientation,这在大多数情况下会与您的UI方向相匹配。

答案 2 :(得分:2)

您可以做的是创建通知,然后相应地完成工作!

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:)     name:UIDeviceOrientationDidChangeNotification object:nil];

尝试使用此功能

[UIApplication sharedApplication].statusBarOrientation 

在它的风景时返回肖像,在启动时在iPad中返回时的风景

答案 3 :(得分:2)

我有一个应用程序,发布方向对我来说至关重要。我很沮丧地得知Apple的官方立场是你应该用肖像创建你的视图。来自UIViewController的文档:

  

在发布时,应用应始终在其中设置其界面   纵向。之后   application:didFinishLaunchingWithOptions:方法返回,app   使用上述视图控制器旋转机制进行旋转   在显示窗口之前,视图到适当的方向。

你可以按照严酷的建议行事,但它不会起作用......不管怎样你都不需要它。原因是在应用程序启动后的一秒左右没有生成正确的方向通知。我认为 Aaron 建议使用viewWillLayoutSubviews可能值得研究。

在我上面提到的应用程序中,我没有加载视图,直到我得到设备所处方向的第一个合法通知。相反,我只是显示启动图像一段时间,直到我知道哪个方向用。来设置视图。