由于不推荐使用iOS8方法来检测UIViewController的方向
例如,不推荐使用-interfaceOrientation
来检测当前的视图控制器方向,我们需要将这些信息提供给视图控制器上的-traitCollection
属性。
我有点困惑iPad的两个方向都有他的特点
检测当前方向的最佳方法是什么?
答案 0 :(得分:1)
查找UIDevice的UIDeviceOrientation部分及其orientation属性。文档是here。这就是我进行方向检查的方法。您还可以查看屏幕宽度是否大于屏幕高度,因为有时候,尤其是首次启动应用时,它将是UIDeviceOrientationUnknown。
答案 1 :(得分:1)
Best practice is to use size classes rather than device orientation.
The iPad has regular size in both orientations because, regardless of orientation, the iPad has plenty of room for content both vertically and horizontally.
You should consider why you wish to treat the iPad display differently in portrait vs. landscape orientation, and explain more clearly here why size classes don't fulfill your need.
答案 2 :(得分:1)
使用UIDevice的-orientation
属性不正确(即使它可以在大多数情况下工作)并且可能导致一些错误,例如UIDeviceOrientation
也考虑设备的方向(如果是面朝上或朝下,UIInterfaceOrientation
枚举中没有对这些值的对
此外,如果您将应用程序锁定在某个特定方向,UIDevice将为您提供设备方向,而不考虑这一点
另一方面,iOS8已弃用interfaceOrientation
类的UIViewController
属性。
有两个选项可用于检测界面方向:
仍然缺少一种理解界面方向变化方向的方法,这在动画制作过程中非常重要。
在WWDC 2014的会议中"查看iOS8中的控制器进展"说话者也使用替换-will/DidRotateToInterfaceOrientation
的方法提供了解决该问题的方法。
这里提出的解决方案部分实施:
-(void) viewWillTransitionToSize:(CGSize)s withTransitionCoordinator:(UIVCTC)t {
orientation = [self orientationFromTransform: [t targetTransform]];
oldOrientation = [[UIApplication sharedApplication] statusBarOrientation];
[self myWillRotateToInterfaceOrientation:orientation duration: duration];
[t animateAlongsideTransition:^(id <UIVCTCContext>) {
[self myWillAnimateRotationToInterfaceOrientation:orientation
duration:duration];
}
completion: ^(id <UIVCTCContext>) {
[self myDidAnimateFromInterfaceOrientation:oldOrientation];
}];
}
答案 3 :(得分:1)
自iOS 9和新的多任务处理功能以来,Apple建议使用TraitCollection或比较视图边界以满足您的设计需求。
看看我对类似问题的回答: apple recommends you to compare view bounds