旋转人像景观与2 XIB

时间:2009-10-17 06:19:22

标签: objective-c uiview landscape portrait

我有2个GUI和2个控制器 1被称为landscapeguicontroller,第二个被称为highguicontroller。

现在我通常会调用highguicontroller,当我旋转我的iphone时,它会检测到它,然后它会显示landscapeguicontroller: 代码:

    landscapeguicontroller *neu =[[landscapeguicontroller alloc] initWithNibName:nil bundle:nil];
    [self presentModalViewController:neu animated:YES];     
    [self dismissModalViewControllerAnimated:YES];

问题在于动画将新窗口从iphone的外侧推到窗口。

在Landscapeguicontroller中,我添加了以下几行:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

当我想回到我称之为的高监控器时:

[self dismissModalViewControllerAnimated:YES];

一切正常,但只是在第二个动画中,我看到了正确的“旋转动画”。 你有什么建议吗?

所以简短的问题描述: 在1.从高到高的动画中,景观被推入窗口 但是在2.从风景到高的动画中,旋​​转看起来像一个真正的旋转......

我希望1.animation看起来像2.动画

最好的问候 Ploetzeneder

2 个答案:

答案 0 :(得分:3)

要避免“问题在于,动画会将新窗口从iphone的外侧推入窗口。”,尝试将视图控制器的modalTransitionStyle属性设置为以下之一,无论您喜欢什么: typedef enum {    UIModalTransitionStyleCoverVertical = 0,    UIModalTransitionStyleFlipHorizo​​ntal,    UIModalTransitionStyleCrossDissolve, } UIModalTransitionStyle;

此外,如果您想避免动画旋转,可以将shouldRotate ...方法设置为禁止其他方向,但设置为在设备物理更改方向时接收通知,并在设置时显示模态视图控制器适当的方向。有关此示例,请参阅Apple的“AlternateViews”示例代码。

通知反映了设备的物理方向,无论接口是否允许更改,您都可以接收通知。 (您可以查看UIApplications的statusBarOrientation属性,了解UI的方向)。

答案 1 :(得分:1)

听起来你想让序列像这样:

  1. 将设备从纵向旋转到横向
  2. 将纵向视图(highguicontroller)设置为横向
  3. 从屏幕的新“底部”向上推横向视图(landscapeguicontroller
  4. 如果这是正确的,您需要在highguicontroller实施中使用以下内容:

    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
    {
      return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
    }
    

    这将处理第2步(它会将纵向视图旋转到任意方向的横向)。

    然后你会想要这样的东西:

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
    {
      if(fromInterfaceOrientation == UIInterfaceOrientationPortrait) {
        [self presentModalViewController:landscapeguicontroller animated:YES];
      }
      else {
        [self dismissModalViewControllerAnimated:YES];
      }
    }
    

    旋转动画完成后应显示横向视图,然后在设备旋转回肖像后将其关闭。

    希望有所帮助!