2011-01-14 6 views
7

मान लें कि मैं उन्हें एनिमेट करने के उद्देश्य से 50 छवियों को एक दृश्य में जोड़ना चाहता हूं। और मान लीजिए कि मैं "UIView" एनीमेशन के बजाय कोर एनीमेशन (उदा।, CABasicAnimation) का उपयोग करने की योजना बना रहा हूं।आईओएस: क्या मुझे एनीमेशन के लिए UIViews या CALayers जोड़ना चाहिए?

क्या मैं 50 सबव्यू या 50 सबबेलर्स जोड़कर इसे लागू करने से बेहतर हूं? क्या इससे कोई फर्क पड़ता है?

धन्यवाद।

उत्तर

16

जैसा कि मैंने here का वर्णन किया है, मैंने एनिमेशन में UIViews और CALayers दोनों का उपयोग किया है और उनके बीच एक नगण्य प्रदर्शन अंतर पाया है। UIViews परतों के चारों ओर बहुत हल्के रैपर हैं। साथ ही, आपको आवश्यक किसी परत-आधारित एनिमेशन को UIView की बैकिंग परत पर आसानी से लागू किया जा सकता है।

मैंने सीधे उन परिस्थितियों में कैलियर का उपयोग किया है जहां मैं क्रॉस-प्लेटफार्म (मैक/आईओएस) यूआई तत्व बनाना चाहता था, क्योंकि कैलियर दोनों प्लेटफार्मों (काफी अलग NSViews और UIViews के विपरीत) पर उनके कार्यान्वयन में लगभग समान हैं। कैलियर के पास बॉक्स से बाहर कोई टच-हैंडलिंग दिनचर्या नहीं है, लेकिन यदि आपको आवश्यकता हो तो आप उस क्षमता को जोड़ सकते हैं।

कुछ किनारे के मामले भी हैं जहां आप परतों के साथ सीधे काम करना चाहेंगे, जैसे परतों के सीमित 3-डी हेरफेर (कवरफ्लो प्रभाव में) या कण प्रभाव उत्पन्न करने के लिए एक कार्प्लिकेटर लेयर का उपयोग करते समय।

+0

मैं UIViews के साथ जा रहा था, मुख्य रूप से क्योंकि ब्लॉक के साथ UIView एनीमेशन उन मामलों में कार्यान्वित करना इतना आसान है जहां एनिमेशन चलाने/क्रमशः क्रियाएं करना महत्वपूर्ण है। (वे समापन ब्लॉक बहुत साफ हैं, और एक प्रतिनिधि 'एनीमेशनडिडटॉप' कॉल का उपयोग करके मेरे विशेष मामले में लागू करने के लिए एक दुःस्वप्न होने वाला था।) –

+1

@ ग्रेग - हां, नया ब्लॉक-आधारित यूआईवीव एनिमेशन बहुत साफ है। हालांकि, आप CATransaction की '+ setCompletionBlock: 'का उपयोग करके CAAnimations के साथ समान ब्लॉक समापन कॉलबैक प्राप्त कर सकते हैं, जो उस लेनदेन के भीतर लिपटे सभी एनिमेशनों को पूरा करने पर एक ब्लॉक निष्पादित करेगा। अगर आप इस तरह से जाना चाहें तो बस कुछ सोचने के लिए। –

1

UIViews में सब्लेयर होते हैं, इसलिए वे भारी वजन रखते हैं, और ऐसी चीजें होती हैं जिनकी आपको संभवतः सभी 50 छवियों, जैसे घटना और स्पर्श हैंडलर/चर के लिए आवश्यकता नहीं होती है। तो परतों का उपयोग शायद थोड़ा अधिक कुशल होगा और प्रत्येक छवि के लिए विचारों का उपयोग करने से थोड़ा कम स्मृति का उपयोग करें।

1

ऐसी छोटी संख्या में छवियों के लिए अंतर नगण्य है। सबसे सुविधाजनक क्या उपयोग करें।

+0

मेरे प्रयोग में, मैंने पाया कि लगभग 50 छवियां हैं जो मुझे आईफोन 4 पर कुछ परेशान करने से पहले एनिमेट कर सकती हैं। (मुझे लगता है कि यह संख्या छवियों की सामग्री/आकार, नीचे पारदर्शी परतों की संख्या के आधार पर काफी भिन्न होती है एनिमेटेड छवियों, आदि) –

+0

और फोन मॉडल: डी – BallpointBen

0

मैंने एनीमेशन नहीं किया है (अभी तक :-), लेकिन मुझे जो सामान याद है, उसे पढ़ने के लिए सभी छवियों के साथ एक छवि बनाने का सुझाव मिलता है और फिर ड्राइंग करते समय सही छवि पर ऑफसेट होता है। इस तरह आपको केवल एक परत या यूआईएममेज या इसे प्रदर्शित करने की आवश्यकता होती है। मुझे गति के बारे में पता नहीं है, लेकिन मुझे लगता है कि यह स्मृति को बचाएगा और शायद प्रबंधन और कोड करना आसान होगा।

+0

इसे आम तौर पर "स्प्राइट" के रूप में जाना जाता है और ओपनजीएल एनिमेशन पर लागू होता है लेकिन वास्तव में कोरएनीमेशन पर लागू नहीं होता है। –

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