第二次调用时,CGAffineTransformMakeRotation无法正常工作

时间:2012-09-20 09:47:41

标签: rotation transform cgaffinetransform

我有这个功能将UIButtons旋转45度。但是一旦它旋转,回想起相同的方法不再进行旋转,并且在第一次旋转之后按钮被卡在其旋转位置。有任何想法吗?

- (void)rotateImage:(UIButton *)image duration:(NSTimeInterval)duration 
              curve:(int)curve degrees:(CGFloat)degrees
{
    // Setup the animation
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:duration];
    [UIView setAnimationCurve:curve];
    [UIView setAnimationBeginsFromCurrentState:YES];

    // The transform matrix
    CGAffineTransform transform = 
    CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
    image.transform = transform;

    // Commit the changes
    [UIView commitAnimations];
}

1 个答案:

答案 0 :(得分:4)

transform属性是绝对的。如果您想要从当前位置进行相对旋转,您需要跟踪按钮的绝对旋转并使用现有方法(可能更快),或将新旋转连接到现有旋转。下面是连接旋转矩阵的代码。

我没有使用我的Obj-C(我使用的是MonoTouch),但它可能在C中看起来像这样:

image.transform = image.transform.Rotate(DEGREES_TO_RADIANS(degrees));

或者这个:

image.transform = CGAffineTransformationConcat( 
    image.transform, 
    CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(degrees));
)

随意修改此帖子以使其适当Obj-C。