在旋转上放置和移动视图(UIView)

Rud*_*ger 16 iphone objective-c uiview ipad ios

当应用程序旋转时,准确放置和移动视图的"正确"方法是什么?也就是说,当UI从纵向旋转到横向时,如何对视图的位置,大小和重排进行细粒度控制(反之亦然)?我认为我的两个选择是:

  1. 使用两个超级视图(纵向和横向).旋转:在它们之间切换.
  2. 使用一个超级视图.旋转时:更改每个子视图的框架,边界和中心属性.

如果你有两个具有足够独特的布局和元素的视图,那么第一种方式可能就足够了.如果你的两个视图基本上是针对不同方向的大小相同的,那么第二种方式可能是仅使用一个视图来实现它的更好方法.

我怀疑前者可以用IB完成,而后者应该以编程方式完成.

肖像到风景

EJV*_*EJV 9

要在iPhone旋转时对子视图的位置和大小进行细粒度控制,请在UIViewController方法中更改子视图的框架willAnimateRotationToInterfaceOrientation:duration:.此方法在动画块中调用,因此您在其中创建的子视图帧的所有更改都是动画的.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        // Portrait frames
        self.subviewA.frame = CGRectMake(x, y, width, height);
        self.subviewB.frame = CGRectMake(x, y, width, height);
        self.subviewC.frame = CGRectMake(x, y, width, height);
    } else {
        // Landscape frames
        self.subviewA.frame = CGRectMake(x, y, width, height);
        self.subviewB.frame = CGRectMake(x, y, width, height);
        self.subviewC.frame = CGRectMake(x, y, width, height);
    }
}
Run Code Online (Sandbox Code Playgroud)