在iOS中实现Orientation切换的正确方法是什么

时间:2013-03-01 23:04:26

标签: ios view screen-orientation

我很想知道在iOS应用中切换方向。我所做的每个教程都只讨论了视图自动旋转。我更喜欢风景和肖像的自定义视图。我知道如何制作横向视图控制器和纵向视图控制器。我的问题是你需要单独的视图控制器来处理不同的方向吗?如果是这样,您是否将所有代码从纵向视图控制器复制并粘贴到横向视图控制器,然后连接新视图控制器上的所有插座和操作?如果是这种情况,那么是在单独的类(可能是app委托)中编写的方向代码,提供有关哪个视图控制器可以访问的说明?每次我查看这个,我都会看到这样的代码:

if (allowLandscape) {
return UIInterfaceOrientationIsLandscape(toInterfaceOrientation) || toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }
 else {
 return toInterfaceOrientation == UIInterfaceOrientationPortrait;
 }

在上面的代码中,toInterfaceOrientation方法看起来是什么样的,上面写的代码在哪里?它是在视图中加载了纵向/横向视图控制器的方法还是在另一个类中?

2 个答案:

答案 0 :(得分:0)

如果您可以避免重复代码,那么这始终是最佳选择。 (干 - 不要重复自己http://en.wikipedia.org/wiki/Don't_repeat_yourself)

我会尽可能地尝试使用一个可以处理两种布局的视图控制器。如果肖像和风景之间的视图真的不同,那么您可能只需要两个视图控制器。

我不确定您发布的代码。

你应该看一下:https://developer.apple.com/videos/wwdc/2012/?id=236 他们深入研究了新的iOS 6轮换内容。

答案 1 :(得分:0)

可以为纵向和横向视图提供单独的视图控制器,但在大多数情况下这样做并不是最好的解决方案。请查看此Apple documentation以了解相关方法。

最好在切换方向时简单地重新排列子视图和视图中的元素。使用自动布局来定义元素的约束。如果您的界面相当复杂,您可能必须删除一些约束并在方向更改之前添加新闻。如果您的界面非常复杂并且需要界面元素在方向更改时完全更改其大小和位置,那么您很可能需要删除所有约束,然后为新的方向视图添加所有新约束。在任何一种情况下,在添加和删除约束时,请在 willRotatetoInterfaceOrientation 视图控制器方法中执行此操作以获得最佳视觉效果。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

    [self.view removeConstraints:self.view.constraints];

    if ((toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) || (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) ) {        
        // add landscape constraints here
    }
    else if ((toInterfaceOrientation == UIInterfaceOrientationPortrait) || (toInterfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)) {
        // add portrait constraints here
    }
}

使用可视格式语言以编程方式创建约束。我在VFL上看到的一篇好文章是Richard Turton在Command Shift中的Visual Format Language