2012-09-20 1 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 속성은 절대 값입니다. 현재 위치에서 상대 회전을 원할 경우 버튼의 절대 회전을 추적하고 기존 방법을 사용하거나 (더 빨라질 수 있음) 새 회전을 기존 회전에 연결해야합니다. 아래는 회전 행렬을 연결하는 코드입니다.

내의 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로 만드십시오.

+0

의미가 있습니다. 감사. –

+1

당신을 진심으로 환영합니다. 기꺼이 도와주세요. – cod3monk3y

+1

다음 정의를 사용하여이 작업을 수행하십시오. #define DEGREES_TO_RADIANS (x) (M_PI * (x)/180.0) – ColossalChris