使用CGAffineTransformMakeRotation旋转UIView

时间:2014-10-05 01:34:51

标签: objective-c xcode

我使用以下代码将我的UIView旋转到90度。

    - (IBAction)rotateView:(id)sender {

    [UIView animateWithDuration:0.2 animations:^{
        _myView.transform = CGAffineTransformMakeRotation(M_PI/2);
    }]; 
}

如果我再次调用 rotateView 操作,则 _myView 不会再次旋转。任何想法如何解决这个问题?我想每次调用rotateView时都将_myView旋转90度。

2 个答案:

答案 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);
    }]; 
}