2012-07-20 14 views
6

के लिए CATransform3DRotate घुमाएं मैंने हाल ही में CATransform3D का उपयोग करना शुरू कर दिया है और यह बहुत अच्छा लगता है। हालांकि रोटेशन के साथ मेरे पास अभी 1 समस्या है। मैं सही करने के लिए 360˚ डिग्री के लिए मेरे विचार को घुमाने के लिए कोशिश कर रहा हूँ, लेकिन अगर मैं सिर्फ CATransform3DRotate को 360 से पारित कर दिया यह काम नहीं करता360 डिग्री

यहाँ मेरी कोड है (यह सिर्फ सब पर नहीं जाते हैं।):

 CALayer *layer = dock.layer; 
     CATransform3D r = CATransform3DIdentity; 
     r.m34 = 1.0/-500; 
     r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f); 
     layer.transform = r; 

क्या कोई इस मुद्दे को ठीक करने का तरीका जानता है? अग्रिम में धन्यवाद! :)

+0

आप 180 या 360 डिग्री बारी बारी से करने की कोशिश कर रहे हैं:

यह करने के लिए एक और तरीका है, जो शायद बेहतर काम करता है अगर आप एक बंद अक्ष वेक्टर चारों ओर घुमाना चाहते, कोई मुख्य-फ़्रेम एनीमेशन का उपयोग कर, इस तरह है ? क्योंकि मुझे लगता है कि घूर्णन 360 डिग्री समान घूर्णन के समान नहीं है। – htinlinn

+0

@htinlinn मुझे लगता है कि वह एक पूर्ण 360 डिग्री रोटेशन के माध्यम से अपनी परत को एनिमेट करने की कोशिश कर रहा है। –

+0

@robmayoff आह। ठीक। – htinlinn

उत्तर

22

आप अपनी जेड धुरी के चारों ओर एक (या अधिक) पूर्ण रोटेशन के माध्यम से एक परत परत की transform.rotation कुंजी पथ एनिमेट द्वारा, इस तरह चेतन कर सकते हैं:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
animation.duration = .25; 
animation.fromValue = [NSNumber numberWithFloat:0]; 
animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; 
[layer addAnimation:animation forKey:animation.keyPath]; 

आप एक्स या वाई अक्ष के चारों ओर चेतन कर सकते हैं मुख्य पथ transform.rotation.x और transform.rotation.y का उपयोग कर। (transform.rotation.z कुंजी पथ का प्रभाव transform.rotation कुंजी पथ जैसा ही है।) आप अलग-अलग अक्षों पर एक साथ कई घूर्णन लागू कर सकते हैं।

CALayer *layer = [sender layer]; 
CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0/-50; 
layer.transform = transform; 

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
animation.values = [NSArray arrayWithObjects: 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI/2, 100, 1, 100)], 
    nil]; 
animation.duration = 2; 
[layer addAnimation:animation forKey:animation.keyPath]; 
संबंधित मुद्दे