当方向改变时,视图控制器对我做了什么?

时间:2010-01-28 03:15:02

标签: iphone

由项目模板基于视图的应用程序生成的简单iphone程序,带有几个按钮,我添加了以下代码:

- (void) showInfo: (UIView *) view {
    NSLog(@"view bounds  %6.2f %6.2f %6.2f %6.2f", view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width, view.bounds.size.height);
    NSLog(@"view frame   %6.2f %6.2f %6.2f %6.2f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);
    NSLog(@"view center  %6.2f %6.2f", view.center.x, view.center.y);
}

- (BOOL)shouldAutorotateToInterfaceOrientation: UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

- (void)willRotateToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation duration:(NSTimeInterval) duration {
    switch(toInterfaceOrientation) {
        case UIInterfaceOrientationPortrait:
            [self showInfo: self.view];
            break;
        case UIInterfaceOrientationLandscapeLeft:
            [self showInfo: self.view];
            break;
        case UIInterfaceOrientationLandscapeRight:
            [self showInfo: self.view];
            break;
    }
}

- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) fromInterfaceOrientation {
    switch(fromInterfaceOrientation) {
        case UIInterfaceOrientationPortrait:
            [self showInfo: self.view];
            break;
        case UIInterfaceOrientationLandscapeLeft:
            [self showInfo: self.view];
            break;
        case UIInterfaceOrientationLandscapeRight:
            [self showInfo: self.view];
            break;
    }
}

在纵向中启动模拟器,更改为横向右侧。我可以得到:

查看边界0.00 0.00 320.00 460.00
查看框架0.00 20.00 320.00 460.00
查看中心160.00 250.00
在纵向中,视图的大小为320x460,由于状态栏,它的原点是(0,20)。

view bounds 0.00 0.00 480.00 300.00
查看框架0.00 0.00 300.00 480.00
查看中心150.00 240.00
在横向右侧,边界的大小更改为480x300,但帧的原点是(0,0)。框架的大小与边界不同。

在我的脑海中,我想这些坐标如下图所示:

Portrait

Portrait

我的问题是:在横向右侧,似乎框架的原点指向一个位置,而边界的原点指向另一个位置。所以我认为视图控制器中的某个位置会发生一些旋转。它在哪里以及它做了什么?

感谢您阅读这个长期且不那么明确的问题。 :)

1 个答案:

答案 0 :(得分:7)

在横向模式下,“内容视图”(controller.view)将调整大小并应用90度的变换。

由于bounds表示内部坐标系中的边界矩形,bounds.origin将始终位于视图本身的左上角。

但是,frame外部或父级坐标系中的边界矩形。视图的父级是窗口,它仍然具有设备绝对左上角的原点。因此,frame.origin处于横向模式的该位置。