我有一个UIWebView
,我想根据其纵向或横向加载不同的网址。如何在viewWillAppear
内找出我当前的方向?
答案 0 :(得分:14)
使用UIApplication的statusBarOrientation
属性。如果您使用设备方向UIDeviceOrientationFaceUp
或UIDeviceOrientationFaceDown
,则可能会遇到问题。
示例强>
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (UIInterfaceOrientationIsLandscape(orientation))
{
// Do something when in landscape
}
else
{
// Do something when in portrait
}
答案 1 :(得分:4)
UIDeviceOrientation getCurrentOrientation() {
UIDevice *device = [UIDevice currentDevice];
[device beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation currentOrientation = device.orientation;
[device endGeneratingDeviceOrientationNotifications];
return currentOrientation;
}
由您将UIDeviceOrientation
转换为UIInterfaceOrientation
。
答案 2 :(得分:2)
当应用加载时,它不知道其当前方向 -
UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
if (orientation == UIDeviceOrientationPortrait) {
NSLog(@"portrait");// only works after a rotation, not on loading app
}
旋转设备后,您可以获得正确的方向,但是在加载应用时,如果不更改方向,似乎使用[[UIDevice currentDevice] orientation]
并不知道当前的方向。
所以你需要做两件事 -
shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)
rotate:
方法以返回YES
醇>
答案 3 :(得分:1)
如果相关调用的顺序意味着您不能依赖interfaceOrientation
viewWillAppear
处的正确值,那么 - 假设父视图控制器旋转 - 最安全的事情可能是{{1 }}。如果没有你可以尝试从self.parentViewController.interfaceOrientation
做出第一个假设,这可能并不总是100%的钱(例如,如果你的应用程序启动时设备平躺在桌子上)但很可能会给你一个更好的猜测,而不是总是假设肖像。