0

我对在 iOS 应用程序中切换方向感到好奇。我所做的每个教程都只是谈论让视图自动旋转。我更喜欢横向和纵向的自定义视图。我知道如何制作横向视图控制器和纵向视图控制器。我的问题是您是否需要单独的视图控制器来处理不同的方向?如果是这样,您是否将所有代码从纵向视图控制器复制并粘贴到横向视图控制器,然后连接新视图控制器上的所有插座和操作?如果是这种情况,那么方向代码是否编写在单独的类(可能是应用程序委托)中,指示访问哪个视图控制器?每次我查看这个时,我都会看到这样的代码:

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

在上面的代码中,toInterfaceOrientation 方法会是什么样子,上面的代码写在哪里?是在纵向/横向视图控制器的视图中加载方法还是在不同的类中?

4

2 回答 2

0

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

我会尽可能地尝试使用一个可以处理两种布局的视图控制器。如果纵向和横向之间的视图确实不同,那么也许您只需要两个视图控制器。

我不确定您发布的代码。

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

于 2013-03-01T23:20:59.760 回答
0

可以为纵向和横向视图使用单独的视图控制器,但在大多数情况下这样做并不是最好的解决方案。查看此Apple 文档以了解如何执行此操作。

最好在切换方向时简单地重新排列子视图和视图中的元素。使用自动布局来定义元素的约束。如果您的界面相当复杂,您可能必须在方向更改之前删除一些约束并添加新的约束。如果您的界面非常复杂并且需要界面元素在方向更改时完全改变它们的大小和位置,那么您很可能需要删除所有约束,然后为新的方向视图添加所有新约束。无论哪种情况,在添加和删除约束时,都在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

于 2013-10-30T13:42:06.097 回答