模态视图的Ipad方向问题

时间:2010-10-01 18:15:14

标签: iphone ipad orientation

我遇到了模态视图旋转的问题。 我在纵向模式下创建一个主视图,然后我创建一个模态视图。一切正常:我可以旋转模态视图,支持所有方向。 如果我以纵向模式创建主视图然后在横向旋转,之后我创建我的模态视图...模式处于纵向模式而不是应该是横向。

主视图和模态视图中的bothAutorotateToInterfaceOrientation都返回YES。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

如果在iOS排队旋转事件之后但在处理旋转事件之前呈现视图控制器,则会发生这种情况。从观察来看,我认为旋转事件特定于当前呈现的视图控制器。

这是一种有用的思考方式:

  1. 旋转事件由iOS排队等候顶视图控制器,A。
  2. 您的代码提供了一个视图控制器,B。
  3. rotate事件已出列,但它仅处理视图控制器A.
  4. 谢天谢地,这是一个非常简单的解决方案。假设事件队列中有一个旋转事件,并确保您的视图在之后实际显示。您可以通过排队新视图控制器的演示文稿来完成此操作,而不是直接显示它。排队到主队列的块将在已排队的任何事件(如旋转事件)之后执行,但之前用户有机会与您的UI进行交互。

    变化:

    [self performSegueWithIdentifier: @"firstRun" sender: self];
    

    要:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self performSegueWithIdentifier: @"firstRun" sender: self];
    });
    

    执行此操作后,您会收到此行为:

    1. 旋转事件由iOS排队等候顶视图控制器,A。
    2. 您的代码会安排将显示新视图控制器的块。
    3. rotate事件已出列,但它仅处理视图控制器A.
    4. 新视图控制器B由您的块显示。它获得了新的定位。

答案 1 :(得分:0)

我有同样的问题。我终于通过从主视图控制器显示模态视图(而不是从其中一个子视图的视图控制器)来解决它。

答案 2 :(得分:0)

如果出现同样的问题,最后会将模态延迟一秒钟,这样“父级”视图控制器就可以获得正确的方向。

[self performSelector:@selector(presentLogin) withObject:nil afterDelay:1.0]

presentLogin看起来像:

- (void) presentLogin {
LoginVC *loginVC = [[LoginVC alloc] init];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:loginViewController];
nav.modalPresentationStyle =UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:NULL]; 
}