如何同时旋转和移动UIView?

时间:2014-08-18 16:44:02

标签: objective-c uiview cgaffinetransform

我正在尝试进行UIView移动并同时旋转。

这是我的代码:

_viewToDrag.frame = CGRectMake(x, y, size, width);
_viewToDrag.transform = CGAffineTransformMakeRotation(-M_PI_2 * multiplier));

随着乘数的增加(0.0 .. 1.0),视图会超出任何逻辑。

这篇文章似乎回答了我的问题: Rotating and Moving a UIImageView (CocoaTouch)

但是,因为我是代码诵读困难而且有点迟钝可以解释一下这会转化为代码:

  

改为改变“中心”属性。

我会发表评论,但我的声誉不允许。

2 个答案:

答案 0 :(得分:1)

框架具有中心属性以及原点和大小。

中心是一个像原点一样的CGPoint,除了它标志着框架的中心而不是左上角。

答案 1 :(得分:1)

请务必查阅文档。 Apple在frame部分的centre部分中,在旁边有感叹号图标的大盒子中说:

  

警告:如果transform属性不是identity变换,那么   此属性的值未定义,因此应忽略。

CGAffineTransformTranslate下面,它说:

  

中心在其超视图的坐标系内指定   并以分数衡量。设置此属性会更改值   相应的框架属性。

所以你链接的答案是不正确的。考虑到它的一句话性质而没有提及来源,可能是作者尝试过一次,在他碰巧安装的iOS版本上,它看起来像是有效的,他直接跳到了一个不支持的结论。

另一个答案是正确的。您需要在转换中构建转换。可能会使用_viewToDrag.transform = CGAffineTransformRotate( CGAffineTransformMakeTranslation(1000.0, 0.0), -M_PI_2);

编辑:所以,设置一个平移为(1000,0)且旋转为-M_PI / 2的变换:

{{1}}