在阅读了很多帖子后,我仍然不知道如何解决这个问题......
我的应用程序的第一个视图是tableViewController。我重写
(BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
并且始终返回YES。
如果我在横向方向上竖立iPad,它会在我启动应用程序后立即旋转。但是,如果我把我的iPad放在桌子上,即使我的主页是横向的,它也会以朝向的方式发布。
所以我猜问题是,我如何获得主页的方向并以该方向启动我的应用程序?
答案 0 :(得分:1)
我有同样的问题。你添加到窗口的第一个视图控制器以及它具有的任何方向都会有一些时髦的东西。如果您希望第一个以正确的方向打开
,请确保视图控制器都返回YES作为方向答案 1 :(得分:1)
我的应用是openGL,但我处理这个问题的方法是使用通知:
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return YES;
}
// This is called right BEFORE the view is about to rotate. Here I'm using a notification message
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
NSNotification* notification = [NSNotification notificationWithName:@"orientationIsPortrait" object:self];
[[NSNotificationCenter defaultCenter] postNotification:notification];
}
else {
NSNotification* notification = [NSNotification notificationWithName:@"orientationIsLandscape" object:self];
[[NSNotificationCenter defaultCenter] postNotification:notification];
}
}
在实际开始旋转方向之前,willRotateToInterfaceOrientation被调用。
然后在我的EAGLView initWithFrame中:我设置了观察者..
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewBecamePortrait:) name:@"orientationIsPortrait" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(viewBecameLandscape:) name:@"orientationIsLandscape" object:nil];
并在viewBecamePortrait和viewBecameLandscape中,我以编程方式处理更改。
答案 2 :(得分:0)
在应用程序启动时,只有在横向模式下“主页”屏幕的情况下才会使用.RotateToInterfaceOrientation。 这样,我们可以在设备“面朝上”或“面朝下”时检测方向。 [UIDevice currentDevice]。如果设备不与地面平行,则进行.orientation工作。
答案 3 :(得分:0)
我使用状态栏方向来定位我的opengl视图,如下所示:
UIDeviceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
NSLog(@"%s: orientation: %i", _cmd, (int)orientation);