我需要从ViewController获取设备方向。 我无法依据:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
因为它有时会返回未知方向(例如当设备放在桌面上时)。
我只需要知道我当前的UIView显示的方向(左侧是横向还是横向右侧)。当方向改变时,我不需要更新此值,我只想知道它,当我要求它时。只是一些参考 view.orientation ;)。有什么东西可以帮助我吗?我已经阅读了UIView文档,发现了一些对UIWindow的引用,但没有什么可以帮助我。
答案 0 :(得分:13)
您还可以从UIApplication获取设备方向,尝试使用
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
答案 1 :(得分:4)
UIViewController有一个属性
UIInterfaceOrientation interfaceOrientation;
因此,在您的UIViewController中,您可以随时通过
访问设备的当前方向UIInterfaceOrientation myCurrentOrientation = self.interfaceOrientation;
答案 2 :(得分:0)
Swift版
let currentOrientation:UIInterfaceOrientation = UIApplication.sharedApplication().statusBarOrientation
if currentOrientation.isPortrait {
print("PORTRAIT")
} else if currentOrientation.isLandscape {
print("LANDSCAPE")
}
答案 3 :(得分:-1)
以下是执行相同操作的示例代码。有一个名为 deviceOrientation 的变量,无论何时被问到,它都会回答设备的当前方向。
UIDeviceOrientation deviceOrientation;
- (void)viewWillAppear:(BOOL)animated
{
deviceOrientation = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
[self willAnimateRotationToInterfaceOrientation:deviceOrientation duration:0.5];
}
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
deviceOrientation = (UIDeviceOrientation)interfaceOrientation;
if(interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
NSLog(@"Landscape");
}
else
{
NSLog(@"Portrait");
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return TRUE;
}