CGAffineTransformMakeRotation改变UIView的高度和宽度

时间:2011-12-17 12:54:43

标签: iphone ios4 cgaffinetransform

在UIView的轮换框架之前: - (123.46 326.855; 214.773 149.148);

UIView的轮换框架后: - (109.585 304.877; 242.524 193.104);

我使用了以下代码: -

    CGAffineTransform landscapeTransform;
    landscapeTransform = CGAffineTransformMakeRotation(rotate);
    [contentView setTransform:landscapeTransform];

请帮忙。 感谢

2 个答案:

答案 0 :(得分:4)

子视图的帧是包含子视图(应用了变换)的最小矩形(在superview的边界坐标中)。因此,它受到变换的影响。

UIView *parent = [UIView new];
parent.bounds = CGRectMake(0, 0, 100, 100);

UIView *child = [UIView new];
child.bounds = CGRectMake(0, 0, 10, 10);
child.center = CGPointZero;
    // at this point child.frame == { -5, -5, 10, 10 }

child.transform = CGAffineTransformMakeRotation(M_PI_4);
    // at this point child.frame == { -5 * sqrt(2), -5 * sqrt(2),
    //                                10 * sqrt(2), 10 * sqrt(2) }

答案 1 :(得分:0)

我猜你试图将视图旋转90度,并且你已经将90或-90传递给了变换函数。

值必须是弧度,而不是度。有转换的常量,M_PI给你pi(180度),M_PI_2给你pi / 2(90度)。

视图的帧将受到任何仿射变换的影响 - 帧在superview的坐标系中表示,因此它总是会改变以反映这一点。边界矩形将保持与原始大小一致。

如果将视图旋转90度,则框架高度将变为框架宽度,反之亦然。