2009-02-11 7 views
8

मैं दृश्य के कैलियर पर एक CAKeyframe एनीमेशन का उपयोग करके और "स्थिति" संपत्ति को एनिमेट करने के लिए एक UIView की फ्रेम प्रॉपर्टी को एनिमेट कर रहा हूं। जब उपयोगकर्ता स्क्रीन को टैप करता है, तो मैं एनीमेशन को वर्तमान स्थिति में रुकने में सक्षम होना चाहता हूं, लेकिन मैं ऐसा करने में असमर्थ हूं।प्रगति में हैकिंगफ्रेमएनीमेशन

मैं

[view.layer removeAnimationForKey:kFrameAnimationKey]; 

फोन करके आसानी से पर्याप्त एनीमेशन को रोक सकते हैं समस्या यह है कि न तो देखने के फ्रेम नहीं यह परत की स्थिति है एनीमेशन द्वारा सीधे अपडेट किया जाता है। अगर मैं समय में स्थिति संपत्ति को देखो एनीमेशन शुरू होता है और जब यह

- (void)animationDidStop:(CAAnimation *)animation finished:(BOOL)finished 

में समाप्त होता है यह नहीं बदला है।

ऐसा लगता है कि एनीमेशन बंद होने पर आपको स्पष्ट रूप से ऐसा करने की आवश्यकता है। लेकिन अगर एनीमेशन कुछ मनमानी बिंदु पर रुक जाता है, तो आप नहीं जानते कि यह कितना दूर चला गया है। तो प्रश्न यह है कि एनीमेशन को लेयर की स्थिति संपत्ति को अपडेट करने के तरीके को कैसे अपडेट किया जाए, या यह कैसे पता चलेगा कि एनीमेशन कितना दूर चला गया है जब इसे रोक दिया गया है।

उत्तर

21

आप प्रस्तुति को पकड़कर एनीमेशन की इस रोकथाम को अपने एनिमेटिंग UIView की परत के लेयर प्राप्त कर सकते हैं, फिर एनीमेशन को हटाने से पहले अपने फ्रेम को अपने UIView में लागू कर सकते हैं। उदाहरण के लिए:

movingView.frame = [[movingView.layer presentationLayer] frame]; 
[movingView.layer removeAnimationForKey:@"movementAnimation"]; 

यह वर्तमान एनिमेटेड स्थिति आप देख रहे हैं पर UIView पर रोक लगाना प्रदान करने के लिए लगता है।

+0

उत्तर के लिए धन्यवाद! ऐसा लगता है कि यहां कुंजी यह समझ रही है कि वास्तव में कैलियर की प्रस्तुति परत वास्तव में क्या है। मुझे यकीन नहीं है कि वे इसे समझाने का एक अच्छा काम करते हैं। मुझे अभी भी यकीन नहीं है कि मॉडल परत क्या है। –

+0

"कोर एनीमेशन प्रोग्रामिंग गाइड" में "कोर एनीमेशन रेंडरिंग आर्किटेक्चर" अनुभाग में इस अवधारणा का अच्छा चित्र है। असल में, मॉडल परत वह है जिसे आप सामान्य रूप से मान निर्धारित करते हैं, और प्रस्तुति परत एक पाठक प्रतिलिपि है जो परत की तात्कालिक स्थिति को दर्शाती है। –

संबंधित मुद्दे