2009-01-03 15 views
6

के साथ मदद की ज़रूरत है, मैं आईफोन में एक एप्लीकेशन बना रहा हूं और इसमें कई UIViews और परतें हैं I मैं CAKeyframeAnimation क्लास का उपयोग करके कुछ एनिमेशन कर रहा हूं और चूंकि एनिमेशन को जंजीर किया जाना है, इसलिए मैंने UIView में एनीमेशनडिडटॉप विधि को ओवरराइड कर दिया है।मुझे एनीमेशन कॉलबैक (आईफोन)

मुझे कॉलबैक ठीक से मिल रहा है, हालांकि मैं यह नहीं समझ पाया कि मैं कौन सी एनीमेशन समाप्त कर सकता हूं ताकि मैं अगली शुरू कर सकूं। कॉलबैक फ़ंक्शन के लिए केवल पैरामीटर एक CAAnimation ऑब्जेक्ट और एक बूलियन है।

मैं कक्षा में एक संपत्ति स्थापित करके और विभिन्न एनिमेशनों के लिए एक enum का उपयोग करके इस समस्या को हल कर सकता हूं। हालांकि मैं सिर्फ यह जानना चाहता था कि क्या कॉलबैक में कोई भी अंतर्निहित गुण है जिसे मैं CAKeyframeAnimation ऑब्जेक्ट में सेट कर सकता हूं और फिर इसे कॉलबैक में संदर्भित करता हूं।

किसी भी मदद की सराहना की जाएगी!

उत्तर

11

मुझे पता है कि आपने कहा है कि आप CAKeyframeAnimations का उपयोग कर रहे हैं, लेकिन यदि आप UIView गुणों (मूल, सीमाएं, अल्फा, आदि) की सरल एनीमेशन चाहते हैं, तो आप संपत्ति या गुणों को प्रारंभ/ब्लॉक करें और एक प्रतिनिधि विधि निर्दिष्ट करें जिसे एनीमेशन के पूरा होने पर बुलाया जाता है। जब तक प्रतिनिधि विधि तीन तर्क लेती है, तब तक आप इसे जो कुछ भी चाहते हैं उसे कॉल कर सकते हैं। उदाहरण के लिए:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(yourAnimationHasFinished:finished:context:)]; 
// Change property or properties here 
[UIView commitAnimations]; 

विधि

- (void)yourAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context; 

के नाम से जाना का कारण होगा। मनमाने ढंग से नामकरण यह आपको विभिन्न एनिमेशन के पूरा होने के लिए हैंडलिंग को अलग करने का साधन प्रदान करेगा। मैं इसे सरल एनिमेशन के लिए पसंद करता हूं।

अधिक जटिल एनिमेशन से निपटने के लिए जो सीधे कैलियर के साथ बातचीत करते हैं, एनीमेशनडिडटॉप: समाप्त: प्रतिनिधि विधि एनीमेशन ऑब्जेक्ट को समाप्त कर देता है जो समाप्त हो गया है। यदि आप एक उदाहरण बना रहे हैं जो एकाधिक एनिमेशन के लिए प्रतिनिधि है, तो आप एनीमेशनडिड्सटॉप के भीतर स्विच स्टेटमेंट में उपयोग के लिए एनीमेशन और एनएसएनबर्स का एनएसएमयूटेबल डिक्शनरी बना सकते हैं: समाप्त: विधि। जैसे ही आप CAKeyframeAnimation बनाते हैं, setObject का उपयोग करें: forKey: इसे अपने मिलान करने वाले नंबर पर असाइन करने के लिए, ऑब्जेक्टफोरकी का उपयोग करें: उस एनीमेशन से संबंधित संख्या को पूरा करने के तरीके में ढूंढने के लिए और स्विच स्टेटमेंट में फ़ीड करें।

13

आप एनीमेशन के लिए एक नाम निर्दिष्ट कर सकते हैं और इसे अपने प्रतिनिधि विधि में पढ़ सकते हैं।

[animation setValue:"firstAnimation" forKey:@"name"]; 

...

- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished { 
    if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) { 
    ... 
    } 
} 
+1

मैं संपादित सके यह है, लेकिन यह पहले लाइन के लिए "firstAnimation" @ की जरूरत है [एनीमेशन setValue: "firstAnimation" forKey: @ "नाम"]; – efeyc

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