iphone/ipad方向处理

Mar*_*ark 34 iphone screen-orientation ipad

这是一个普遍的问题,人们可以为我提供指导,基本上我正在学习iPad/iPhone开发,并最终遇到了多方位支持问题.

我查了相当数量的doco,我的书"开始iPhone 3开发"有一个很好的章节.

但我的问题是,如果我以编程方式改变我的控件(或者甚至对每个方向使用不同的视图),人们如何维护他们的代码库?我可以想象很多问题与意大利面条代码/成千上万的"如果"检查到位,它会让我疯狂地对UI安排做一个小改动.

有没有人有处理这个问题的经验?控制它的好方法是什么?

非常感谢马克

Ale*_*lds 41

我在视图控制器中使用两个简单方法执行此操作:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self adjustViewsForOrientation:toInterfaceOrientation];
}

- (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
        titleImageView.center = CGPointMake(235.0f, 42.0f);
        subtitleImageView.center = CGPointMake(355.0f, 70.0f);
        ...
    }
    else if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        titleImageView.center = CGPointMake(160.0f, 52.0f);
        subtitleImageView.center = CGPointMake(275.0f, 80.0f);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

为了保持清洁,您可以轻松划分视图调整/重新加载/等.使用从单个if-else条件内部调用的方法.


dra*_*ard 7

这实际上取决于你的布局.

如果查看Apple设置应用程序,您可以看到它们使用表格视图进行布局,并为大多数行使用自定义单元格.有了它,你可以通过填充单元格的宽度,允许一个简单的界面非常便宜地旋转.这甚至适用于像Mail这样的东西,每行都有编辑文本单元格.表格可以很容易透明,只有按钮或标签可见,因此它们看起来不像表格.

你可以从每个UIView的autoresizingMask中获得很多东西.如果您有一个或多个可以具有灵活高度的项目,那么您通常可以获得在任一方向上看起来都很好的界面布局.根据它的外观,有时您可以将所有内容固定在顶部.

在极少数情况下,如果所有界面元素都适合方形,则可以将它们旋转到位.

有两次必须明确处理方向更改.一种是在旋转时视图从旁边移动到另一个视图下方.另一种是当每个方向有不同的图像时,例如,如果你总是想要全宽.

有时候有办法解决这两个问题.您可以使用可伸缩图像或限制自己每行一个视图.或者您可能会锁定某些视图的方向.

如果必须更改视图的布局,则有一个显式的layoutSubviews方法.您应该尝试在这一种方法中处理所有条件布局.只有在视图边界发生变化时才会调用它,例如在旋转或者为键盘腾出空间时.为需要响应旋转的每个视图层次结构创建自定义视图,并从那里布置子视图.