2

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

1 に答える 1

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 にしてください。

于 2012-09-20T18:18:34.367 に答える