【问题标题】:Width and height increase after CGAffineTransformRotate applied to a UIView将 CGAffineTransformRotate 应用于 UIView 后宽度和高度增加
【发布时间】:2012-02-01 09:13:00
【问题描述】:

我想以编程方式旋转我在下面代码中使用的视图:

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

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

我应该怎么做才能让 contentView 保持原样并旋转?

提前致谢。

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

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

但是当我通过上面的代码旋转这个内容视图时,内容视图的宽度和高度会增加,所以有时它会超出背景边界。

我希望这对您来说很清楚。 :)

【问题讨论】:

  • 如果是真的请选择答案
  • @fasttrack 仍然面临同样的问题。
  • 我找到了一个解决方案,我已经保存了视图的转换,现在可以正常工作了。
  • 你能提供这个解决方案的代码吗?

标签: iphone objective-c ipad cgaffinetransform ios5


【解决方案1】:

宽度和高度(大概是您从frame.size 获取的)必须更改,因为它们描述了容纳整个旋转视图的最小矩形 - 如果您将矩形旋转 45 度,则用于容纳旋转的矩形矩形比原始矩形更宽更高。

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

所以,如果您原来的 frame 是原点 (100,100),大小 (100,50),那么您的旋转视图将有一个 frame,其中原点和大小是一个矩形,可以在其中容纳您的旋转视图,在superview的坐标系中描述。如果你现在这样做:

CGFloat width = contentView.frame.size.width;

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

CGFloat width = contentView.bounds.size.width;

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

【讨论】:

  • 我试图设置 contentView 的边界,但它的子元素仍然在 contentView 之外。
  • 我想旋转视图,但视图的宽度和高度不应该改变。
  • 宽度和高度如何定义?您是否按照我的建议检查了边界矩形?这是在改变吗?你能附上截图什么的吗,因为我真的不知道你的意思=)
  • 谢谢。你节省了我的时间。
猜你喜欢
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
相关资源
最近更新 更多