将变换添加到myView中时,您不是将变换应用于现有变换状态,而是覆盖变换。这意味着当你第二次设置transform = CGAffineTransformMakeRotation(M_PI/2)时,你根本没有改变转换。
编辑: 正如罗布所指出的,当旋转值已存储在变换中时,不需要使用属性rotationInRadians。相反,你可以简单地修改现有的变换是这样的:
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformRotate(_myView.transform, M_PI/2);
}];
下面是一个不理想的解决方案,我以前提出。
您将需要一个跟踪您的旋转的变量。每次旋转时,您将按照您希望的数量递增该变量,然后根据变量的新值创建新的变换。
使属性做到这一点:
@property (nonatomic, assign) CGFloat rotationInRadians;
它在你的init方法初始化为0。然后修改您的rotateView方法以增加rotationInRadians并应用新的变换。
- (IBAction)rotateView:(id)sender {
self.rotationInRadians += M_PI/2;
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformMakeRotation(self.rotationInRadians);
}];
}
惊人!非常感谢。 – 2014-10-05 01:43:06
当视图已经在视图的变换中时,没有理由跟踪单独变量中的旋转。 – 2014-10-05 01:55:19
好点。我看不出将它存储在外部变量中的好处。我会说罗布的答案更简单,更正确。 – dfmuir 2014-10-05 01:58:49