2012-03-14 5 views
11

Ho un programma in cui un CALayer deve essere ruotato su un determinato valore. Come posso determinare la rotazione corrente di un CALayer? Ho un'UIRotationGestureRecognizer che ruota il livello:Determina la rotazione di un 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); 
    } 
} 

inizio con uno strato che deve essere ruotato di una certa quantità di montare un puzzle. Quindi, come ottengo la rotazione corrente del livello?

risposta

20

Si può fare la matematica e ottiene l'angolo in questo modo:

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

ma è più facile da fare come segue:

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

Dal documentation:

Core Animation estende il protocollo di codifica del valore chiave a consente di ottenere e impostare i valori comuni della matrice CATransform3D di un livello tramite percorsi chiave. La Tabella 4 descrive i percorsi chiave per i quali la trasformazione di un layer e le proprietà SublayerTransform sono la codifica dei valori-chiave e l'osservanza conforme

+0

Grazie per la risposta, – KaasCoder