将CGAffineTransformRotate应用于UIView后,宽度和高度会增加

时间:2012-02-01 09:13:01

标签: iphone objective-c ipad cgaffinetransform ios5

我想以编程方式旋转视图,因为我使用了以下代码:

CGAffineTransform rotateTransform = contentView.transform;
CGAffineTransform rotatenewTransform  = CGAffineTransformRotate(rotateTransform,aFloatRotate);
contentView.transform = rotatenewTransform;

当我这样做时,contentView(我的UIView)的宽度和高度会增加。

我该怎么做才能让contentView保持原样并且它也会旋转?

提前感谢。

我在这里更详细地解释我的问题:

我的contentview包含一个按钮和一个imageView。 这个contentView在后台添加,这个contentView不应该超出这个背景边界。

但是当我用上面的代码旋转这个内容视图时,contentView的widht和height会增加,所以有时它会超出背景边界。

我希望你能清楚这一点。 :)

1 个答案:

答案 0 :(得分:11)

宽度和高度(可能是你从frame.size得到的)必须改变,因为它们描述了保存整个旋转视图的最小矩形 - 如果你将一个矩形旋转45度,那么要保持的矩形旋转的矩形比原始矩形更宽更高。

旋转视图的“实际”尺寸仍然可以在bounds矩形中使用 - 这在视图的内部坐标系中表示,该系统未旋转。

因此,如果您的原始frame是原点(100,100),尺寸(100,50),则您的旋转视图会有一个frame,其中原点和大小是一个矩形,可以适合您的旋转在其中查看,在superview的坐标系中描述。如果你现在这样做了:

CGFloat width = contentView.frame.size.width;

你会得到你改变的价值。但是,如果你这样做了:

CGFloat width = contentView.bounds.size.width;

您将获得原始的100宽度值。