【问题标题】:Rotation Portrait Landscape with 2 XIB带 2 XIB 的旋转纵向横向
【发布时间】:2009-10-17 06:19:21
【问题描述】:

我有 2 个 GUI 和 2 个控制器 1个叫landscapeguicontroller,2个叫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);
}

当我想回到我调用的 highguicontroller 时:

[self dismissModalViewControllerAnimated:YES];

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

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

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

最好的问候 Ploetzeneder

【问题讨论】:

    标签: objective-c uiview landscape portrait


    【解决方案1】:

    为避免“问题是动画将新窗口从 iphone 的外侧向上推到窗口中。”,尝试将视图控制器的 modalTransitionStyle 属性设置为以下之一,无论您喜欢什么: 类型定义枚举 { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizo​​ntal, UIModalTransitionStyleCrossDissolve, } UIModalTransitionStyle;

    另外,如果你想避免动画旋转,你可以设置你的 shouldRotate... 方法以禁止其他方向,然后设置为在设备物理改变方向时接收通知,并在适当的方向。有关此示例,请参阅 Apple 的“AlternateViews”示例代码。

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

    【讨论】:

      【解决方案2】:

      听起来你希望序列是这样的:

      1. 将设备从纵向物理旋转到横向
      2. 将纵向视图 (highguicontroller) 动画化为横向
      3. 将横向视图 (landscapeguicontroller) 从屏幕的新“底部”向上推

      如果正确,您需要在 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];
        }
      }
      

      这应该在旋转动画完成后呈现横向视图,然后在设备旋转回纵向后将其关闭。

      希望有帮助!

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多