【问题标题】:What is the proper way of implementing Orientation switching in iOS在iOS中实现方向切换的正确方法是什么
【发布时间】:2013-03-01 23:04:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios view screen-orientation


    【解决方案1】:

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

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

    我不确定您发布的代码。

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

    【讨论】:

      【解决方案2】:

      可以为纵向和横向视图设置单独的视图控制器,但在大多数情况下这样做并不是最佳解决方案。看看这个Apple documentation 的方法。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-06
        • 2018-08-12
        • 1970-01-01
        • 2014-03-22
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多