我有一个应用程序,根据方向显示不同的图像......我一直在使用:
UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation]);
看看它是否是landsCape ...但是如果我在rootViewController中调用它:viewDidLoad
,viewWillAppear
或viewDidAppear
它总是假的......那么我通过比较具有autosizeMask的框架的宽度和高度来尝试数字,如果它的landsCape或没有,所以它总是全屏...它的滚动视图,我做了以下:
BOOL landscape = self.frame.size.width>self.frame.size.height;
但这也不起作用(总是假的),因为此时视图仍然有纵向视图的框架。
答案 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
可能值得研究。
在我上面提到的应用程序中,我没有加载视图,直到我得到设备所处方向的第一个合法通知。相反,我只是显示启动图像一段时间,直到我知道哪个方向用。来设置视图。