2012-03-14 17 views
11

मेरे पास एक ऐसा प्रोग्राम है जिसमें एक कैलियर को कुछ मूल्य पर घुमाया जाना है। मैं कैलियर के वर्तमान घूर्णन को कैसे निर्धारित कर सकता हूं? मैं एक UIRotationGestureRecognizer कि परत घूमता है:निर्धारित करें कि कैलियर कितना घुमाया गया है

- (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); 

लेकिन यह इस प्रकार करना आसान है:

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

documentation से:

कोर एनीमेशन कुंजी-मूल्य कोडिंग प्रोटोकॉल को बढ़ाता है प्रमुख पथों के माध्यम से परत के CATransform3D मैट्रिक्स के सामान्य मानों को प्राप्त करने और सेट करने की अनुमति दें। तालिका 4 उन प्रमुख पथों का वर्णन करता है जिनके लिए एक परत का परिवर्तन और sublayerTransform गुण कुंजी-मूल्य कोडिंग हैं और अनुपालन

+0

उत्तर के लिए धन्यवाद, – KaasCoder