2009-07-16 22 views
72

मैं के रूप में UIView के खुद के एनीमेशन के तरीकों का विरोध करने के एक CALayer के साथ एनिमेशन conceptualizing के साथ संघर्ष कर रहा हूँ बनाम। फेंक दें "कोर एनीमेशन" इसमें और, ठीक है, शायद कोई इन अवधारणाओं को उच्च स्तर से व्यक्त कर सकता है, इसलिए मैं बेहतर हो सकता हूं कि क्या हो रहा है और मैं UIView एनिमेशन को माइग्रेट करना चाहता हूं (जो अब मैं काफी परिचित हूं) आईफोन पर कैलियर एनिमेशन के लिए। कोको-टच में प्रत्येक दृश्य स्वचालित रूप से एक परत प्राप्त करता है। और, ऐसा लगता है, आप एक और/या दूसरे को एनिमेट कर सकते हैं?! यहां तक ​​कि उन्हें एक साथ मिलाएं?! पर क्यों? रेखा कहां है? प्रत्येक के लिए समर्थक/सह क्या है?UIView एनीमेशन CALayers

कोर एनीमेशन प्रोग्रामिंग गाइड तुरंत लेयर & समय सीमाओं में कूदता है और मुझे लगता है कि एक कदम वापस लेने और समझने की आवश्यकता है कि ये विभिन्न टुकड़े क्यों मौजूद हैं और एक दूसरे से कैसे संबंधित हैं।

+3

यह एक उत्कृष्ट, सामान्य उद्देश्य प्रश्न था और सभी उत्तर उत्कृष्ट हैं। मैंने इस धागे पर सभी को वोट दिया। – mobibob

+0

महान सवाल। क्या किसी को UIView के कैलियर एनिमेट करने के लिए सबसे अच्छा अभ्यास पता है?मेरे उदाहरण में मुझे एक 3 डी प्रभाव की आवश्यकता है, और मुझे परत को एनिमेट करने के कारण UIView के 'फ्रेम' को परत के साथ गलत तरीके से मिटाना है (इसलिए एक बटन के लिए, नल अब और मेल नहीं खाते हैं)। – Marc

उत्तर

53

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

+1

इससे मदद मिली, धन्यवाद :) – Spanky

+0

यह एक अच्छा जवाब है। धन्यवाद! – Warpling

9

UIView रूपांतरण केवल 2 डी कर रहे हैं और कि तक ही सीमित हैं, परत तथापि बदल देती है 3 डी हो सकता है और अगर आप 3 डी सामान करना चाहते हैं तो आप उन का उपयोग करना चाहिए, UIView एनीमेशन अगर आप बदलना या तो UIView को बदलने या CALayer को बदलने काम करेंगे। तो एक बुनियादी स्तर पर, जब आप दृश्य के बजाय परत के साथ काम कर रहे हों तो आप बहुत अधिक कुशलतापूर्वक काम कर सकते हैं।

24

एक UIView हमेशा CALayer पर प्रस्तुत किया जाता है। जब आप किसी दृश्य को एनिमेट करने के लिए UIView विधियों का उपयोग करते हैं, तो आप प्रभावी रूप से अंतर्निहित CALayer में हेरफेर कर रहे हैं।

यदि आपको सरल चीजें करने की आवश्यकता है, तो UIView विधियों का उपयोग करें। अधिक जटिल स्थिति के लिए, या यदि आप परतों को विशेष रूप से किसी भी दृश्य से संबद्ध नहीं करना चाहते हैं, तो CALayers का उपयोग करें।

20

मैंने पिछले वर्ष में ऐप्स का एक समूह किया है। यहां अंगूठे का मेरा नियम है:

  1. तब तक UIView का उपयोग करें जब तक कि आप जो भी नहीं चाहते हैं।
  2. फिर कोरएनीमेशन पर जाएं। लेकिन इससे पहले कि आप इसमें बहुत कुछ प्राप्त करें ...
  3. यदि आप कुछ एनिमेशन से अधिक लिखते हैं, तो Cocos2D का उपयोग करें।
+0

कोकोस 2 डी बेहतर क्या कर रहा है? तब टच इवेंट हैंडलिंग और ओपनजीएल ईएस में याद आने वाली कई अन्य चीजों के बारे में आपको अन्य समस्याएं नहीं हैं? – Thanks

+0

कोकोस 2 डी बहुत सारी सुविधा विधियों को जोड़ता है, इसलिए कोड बहुत अधिक कॉम्पैक्ट है। उनके पास कुछ महान अंतर्निहित प्रभाव हैं। संक्षेप में, यदि आप एनीमेशन का एक गुच्छा कर रहे हैं, तो आप कोकोज 2 डी का उपयोग करते हुए ओपनजीएल ईएस या कोर एनीमेशन से कम कोड लिखेंगे। उनके पास अपने स्वयं के स्पर्श हैंडलिंग विधियां हैं, इसलिए यह कोई मुद्दा नहीं है। –

+13

मेरा सुझाव है कि आप कोकोस 2 डी का उपयोग न करें जबतक कि आप कोई गेम नहीं लिख रहे हों। मुझे लगता है कि वास्तव में इसका सबसे अच्छा उपयोग-मामला है। हालांकि, मैं सहमत हूं कि जब तक आप कर सकते हैं, तब तक UIView एनिमेशन का उपयोग करना चाहिए, और इससे परे किसी भी चीज़ के लिए CoreAnimation का उपयोग करना चाहिए। –

2

मुझे यकीन नहीं है कि क्या मैं क्रिस की प्रतिक्रिया को गलत समझ रहा हूं "कोकोस 2 डी बेहतर क्या कर रहा है? क्या आपको टच इवेंट हैंडलिंग और ओपनजीएल ईएस में याद आने वाली कई अन्य चीजों के बारे में अन्य समस्याएं नहीं हैं?"

ऐसा लगता है जैसे उत्तर कोकोस 2 डी ओपनजीएल ईएस फ्रेमवर्क पर आधारित नहीं है जब वास्तव में यह वास्तविक है। हालांकि यह एक महान 2 डी गेम इंजन है, यह ओपनजीएल को इसके अधिकांश प्रतिपादन के लिए कार्यान्वित करता है - भौतिकी लाइब्रेरी से जुड़ा हुआ यह एनीमेशन के लिए बहुत ही रोचक संभावनाओं की अनुमति देता है - और क्रिस सही है - यह वास्तव में बहुत कम कोडिंग है।