我想知道用户启动我的应用时的设备方向,以便产生不同的视图。我觉得奇怪的是如下:
- (void)viewDidLoad
{
if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortrait) {
NSLog(@"1");
}
if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight) {
NSLog(@"2");
}
if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft) {
NSLog(@"3");
}
if ([UIDevice currentDevice].orientation == UIDeviceOrientationPortraitUpsideDown) {
NSLog(@"4");
}
}
没有人打印!我在ipad模拟器上做到了,我认为方向应该是UIDeviceOrientationPortrait。为什么会这样?以及如何正确了解方向?
答案 0 :(得分:1)
尝试使用
[UIApplication sharedApplication].statusBarOrientation
而不是
[UIDevice currentDevice].orientation
答案 1 :(得分:0)
可能是模拟器根本不能处于方向状态(这没有意义,因为你无法真正旋转你的计算机......)你检查过它是否会返回UIDeviceOrientationUnknown
吗? / p>
答案 2 :(得分:0)
文档或UIDevice声明:
您可以使用orientation属性获取当前方向 通过注册接收更改通知 UIDeviceOrientationDidChangeNotification通知。使用前 要获得方向数据,要么必须启用这些技术 使用beginGeneratingDeviceOrientationNotifications进行数据传递 方法
因此,您可能因为从未启动过方向通知生成而获得未知方向。
您还应该在viewDidLoad中记录该值,以确切确认获得方向时收到的内容。这将是进一步调查的良好起点。
答案 3 :(得分:0)
Use this :-
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if(interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
{
//code for portrait
}
else
{ //code for Landscape
}
return (interfaceOrientation == UIInterfaceOrientationLandscapeRight || interfaceOrientation == UIInterfaceOrientationPortrait ||interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}
答案 4 :(得分:0)
根据the docs,orientation
的{{1}}属性将始终返回0(即UIDevice
),除非首先调用UIDeviceOrientationUnknown
。此方法将启用加速度计,发送通知更改,并更新-beginGeneratingDeviceOrientationNotifications
单例的orientation
属性。