2012-02-01 4 views
0

ユーザーがUIRotationGestureを実行するときに、正方形を回転させる必要があります。CALayer変換

私はジェスチャーをすべてセットアップしました。問題は、ユーザーが指を動かすたびに正方形が開始位置に戻り、次に新しい位置にアニメートすることです。以前の位置から新しい位置に移動するのではなく、

すなわち、正方形の回転は90度であり、ユーザーが正方形に戻っ0度に行くと100

にアニメーション化します100に回転し続け、基本的に私は、正方形のときに、ユーザーをミラーする場合それらは回転ジェスチャーを実行する。

- (void)respondToGesture:(UIRotationGestureRecognizer *)rec{ 

NSLog(@"Rotation: %f", rec.rotation); 

[self rotateWithRadian:rec.rotation]; 

if (rec.state == UIGestureRecognizerStateEnded) { 
    NSLog(@"gesture ended"); 
} 

} 



- (void)rotateWithRadian:(float)radian{ 

CABasicAnimation *spin = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 

spin.removedOnCompletion = NO; 

spin.fillMode = kCAFillModeForwards; 

[spin setByValue:[NSNumber numberWithFloat:radian]]; 

[spin setDuration:1.0]; 

[squarelayer addAnimation:spin forKey:@"spinAnimation"]; 

答えて

2

アニメーションを使用する代わりにレイヤのトランスフォームを直接設定しない理由はありますか?

これは、あなたが欲しいものを行う必要があります。

- (void)respondToGesture:(UIRotationGestureRecognizer *)rec { 
    if (rec.state == UIGestureRecognizerStateChanged) { 
     CGAffineTransform currentTransform = squareLayer.affineTransform; 
     squareLayer.affineTransform = CGAffineTransformRotate(currentTransform, gesture.rotation); 
     gesture.rotation = 0; 
    } 
} 

はまた、あなたが回転は、ユーザの回転の中心の代わりに、層の中心の周りに起こるしたい場合はsquareLayer.anchorPointを調整する必要があります。

+0

Spot on Works完璧な乾杯! – geminiCoder

1

オープンソース(https://github.com/kirbyt/KTOneFingerRotationGestureRecognizer)が片手で回転します。あなたはそれをチェックすることができます、はるかに良いでしょう。通常の回転ジェスチャだけが必要な場合でも、回転コードのコードを調べることができます。中心を原点とする。