带 2 XIB 的旋转纵向横向

Posted

技术标签:

【中文标题】带 2 XIB 的旋转纵向横向【英文标题】:Rotation Portrait Landscape with 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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

    将设备从纵向物理旋转到横向 将纵向视图 (highguicontroller) 动画化为横向 将横向视图 (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];
  

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

希望有帮助!

【讨论】:

以上是关于带 2 XIB 的旋转纵向横向的主要内容,如果未能解决你的问题,请参考以下文章

具有纵向/横向视图的 UITabBarController

禁止 UITableViewcontroller 横向旋转(保持纵向)

UIWindow 的根视图控制器在应用启动时不会旋转到横向

禁止 UITableViewcontroller 在横向旋转(保持纵向)

如何从纵向模式自动旋转到横向模式?

纵向/横向单点触控旋转视图