2012-09-20 112 views
2

我有這個函數可以將UIButtons旋轉45度。但是一旦它旋轉了,調用同樣的方法就不會再進行旋轉,並且在第一次旋轉後按鈕被卡在旋轉的位置。有任何想法嗎?CGAffineTransformMakeRotation第二次調用時不起作用

- (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]; 
} 

回答

4

transform屬性是絕對的。如果您想要從當前位置進行相對旋轉,您需要跟蹤按鈕的絕對旋轉角度並使用現有方法(可能會更快),或者將新旋轉連接到現有旋轉。以下是連接旋轉矩陣的代碼。

我不是在我的對象 - (我使用MonoTouch的),但它可能會是這個樣子在C:

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

或者這樣:

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

隨意編輯這篇文章,使其正確Obj-C。

+0

這很有道理。謝謝。 –

+1

不客氣。樂意效勞。 – cod3monk3y

+1

使用此定義進行此工作:#define DEGREES_TO_RADIANS(x)(M_PI *(x)/ 180.0) – ColossalChris

相關問題