因为iOS8检测UIViewController方向的方法是不可取的。
例如,不推荐-interfaceOrientation,为了检测当前视图控制器的方向,我们似乎需要向视图控制器上的-traitCollection属性询问此信息。
我有点困惑,iPad在这两个方向上都有自己的特点。
检测当前方向的最佳方法是什么?
发布于 2015-06-15 19:21:49
使用-orientation属性UIDevice是不正确的(即使它可以在大多数情况下工作),并可能导致一些错误,例如,UIDeviceOrientation也考虑设备的方向,如果它是朝上或向下的,在UIInterfaceOrientation枚举中没有针对这些值的对。
此外,如果您锁定您的应用程序在某些特定的方向,UIDevice将给您的设备方向,而不考虑这一点。
另一方面,iOS8在UIViewController类上不推荐使用interfaceOrientation属性。
有两个选项可用于检测接口方向:
仍然缺少的是理解界面方向变化方向的方法,这在动画中是非常重要的。
在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];
}];
}发布于 2015-02-22 16:41:21
查找UIDeviceOrientation部分的UIDevice及其定向属性。这些文档是这里。我就是这样做定向检查的。您还可以看到屏幕宽度是否大于屏幕高度,因为有时,特别是在应用程序的第一次启动时,它将是UIDeviceOrientationUnknown。
发布于 2015-06-15 14:49:26
最佳实践是使用大小类而不是面向设备。
iPad在两个方向上都有规则的大小,因为无论方向如何,iPad在垂直和水平上都有足够的空间容纳内容。
您应该考虑为什么您希望在纵向和横向方向上不同地对待iPad显示,并在这里更清楚地解释为什么大小类不能满足您的需要。
https://stackoverflow.com/questions/28660145
复制相似问题