2012-03-14 14 views
11

私はCALayerを一定の値に回転させなければならないプログラムを持っています。 CALayerの現在のローテーションを確認するにはどうすればよいですか? 私はレイヤーを回転させるUIRotationGestureRecognizerを持っている:CALayerがどのくらい回転したかを調べる

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer 
{ 
    if (gestureRecognizer == rotationGestureRecognizer) { 
     NSLog(@"gestureRecRotation: %f", rotationGestureRecognizer.rotation); 
     CATransform3D current = _baseLayer.transform; 
     _baseLayer.transform = CATransform3DRotate(current, rotationGestureRecognizer.rotation * M_PI/180, 0, 0, 1.0); 
    } 
} 

私はパズルを合わせて一定量回転する必要がある層で始まります。では、レイヤーの現在の回転をどのように取得するのですか?

答えて

20

あなたは数学を行うと、このような角度を得ることができます。

CATransform3D transform = _baseLayer.transform; 
CGFloat angle = atan2(transform.m12, transform.m11); 

をしかし、次のようにそれを行うのは簡単です:documentationから

CGFloat angle = [(NSNumber *)[_baseLayer valueForKeyPath:@"transform.rotation.z"] floatValue]; 

コアアニメーションは、キー値コーディングプロトコルをレイヤーのCATransform3Dマトリックスの共通の値をキーパスで取得して設定することができます。表4は、レイヤのトランスフォームとサブレイヤトランスフォームのプロパティがキー値コーディングであり、準拠しているキーパスを示しています。

+0

ありがとう、 – KaasCoder

関連する問題