我使用以下代码将我的UIView旋转到90度。
- (IBAction)rotateView:(id)sender {
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformMakeRotation(M_PI/2);
}];
}
如果我再次调用 rotateView 操作,则 _myView 不会再次旋转。任何想法如何解决这个问题?我想每次调用rotateView时都将_myView旋转90度。
答案 0 :(得分:2)
[UIView animateWithDuration:0.2 animations:^{
_myView.transform = CGAffineTransformRotate(_myView.transform, M_PI/2);
}];
答案 1 :(得分:0)
将变换添加到myView时,您没有将变换应用于其现有的变换状态,而是覆盖变换。这意味着当您第二次设置transform = CGAffineTransformMakeRotation(M_PI / 2)时,实际上并没有改变转换。
修改强> 正如Rob指出的那样,当旋转值已经存储在变换中时,不需要使用属性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);
}];
}