2011-10-21 9 views
12

कोर एनीमेशन में ब्लेंडिंग और ऑफ़स्क्रीन-रेंडरिंग दोनों महंगे हैं।मिश्रण वीएस ऑफस्क्रीन-रेंडरिंग, जो कोर एनीमेशन प्रदर्शन के लिए बदतर है?

एक उन्हें उपकरण में कोर एनिमेशन साधन में देख सकते हैं, डीबग विकल्प के साथ: Instruments

यहाँ मेरी मामला है:

प्रदर्शन UIImageViews पर 50x50 PNG छवियाँ। मैं 6-बिंदु कोरर त्रिज्या के साथ छवियों को गोल करना चाहता हूं। पहली विधि UIImageView.layer के कोने रेडियस और मास्क टॉबाउंड सेट करना है जो ऑफ़स्क्रीन-रेंडरिंग का कारण बनती हैं। दूसरी विधि पीएनजी छवि प्रतियों को पारदर्शी कोनों के साथ बनाना है जो मिश्रण (अल्फा चैनल की वजह से) का कारण बनती हैं।

मैंने दोनों की कोशिश की है, लेकिन मुझे महत्वपूर्ण प्रदर्शन अंतर दिखाई नहीं दे रहा है। हालांकि, मैं अभी भी जानना चाहता हूं कि सिद्धांत में कौन सा बुरा है और यदि कोई हो तो सर्वोत्तम प्रथाओं।

बहुत बहुत धन्यवाद!

उत्तर

8

खैर, संक्षिप्त उत्तर, मिश्रण को पारदर्शी कोने पिक्सल को सही ढंग से प्रदर्शित करने के लिए किसी भी तरीके से होना चाहिए। हालांकि, यह आम तौर पर केवल एक मुद्दा होना चाहिए यदि आप परिणामस्वरूप दृश्य को किसी भी तरह से एनिमेट करना चाहते हैं (और याद रखें, स्क्रॉलिंग एनीमेशन का सबसे आम प्रकार है)। साथ ही, मैं उन स्थितियों को फिर से बनाने में सक्षम हूं जहां "कोनेराडियस" पुराने विचारों (मेरे मामले में आईफोन 3 जी) पर प्रतिपादन त्रुटियों का कारण बनता है जब मेरे विचार जटिल हो जाते हैं। उन परिस्थितियों के लिए जहां आपको प्रदर्शन एनिमेशन की आवश्यकता होती है, यहां दी गई सिफारिशें हैं I

सबसे पहले, अगर आपको गोलाकार कोनों के लिए केवल एक वक्र के साथ संसाधनों की आवश्यकता होती है (अलग-अलग तराजू ठीक होते हैं, जब तक वांछित वक्रता समान होती है), उन्हें "कोनेडियस" की अतिरिक्त गणना से बचने के लिए इस तरह से सहेजें चलने के समय पर।

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

तीसरा, पारदर्शी विचारों के आकार को कम करने के तरीके खोजें। उदाहरण के लिए, पारदर्शी तत्वों (जैसे गोलाकार कोनों) के साथ एक बड़े सीमा दृश्य के लिए, दृश्य को 3 (शीर्ष, मध्य, नीचे) या 7 (4 कोनों, शीर्ष मध्य, मध्य, नीचे मध्य) भागों में विभाजित करने पर विचार करें, पारदर्शी भाग रखते हुए यथासंभव छोटा और आयताकार भागों को ठोस पृष्ठभूमि के साथ अपारदर्शी के रूप में चिह्नित करना।

चौथा, जहां आप scrollViews (उदा। अत्यधिक अनुकूलित UITableViewCell) में बहुत सारे टेक्स्ट खींच रहे हैं, इन भागों को अधिक कुशलतापूर्वक प्रस्तुत करने के लिए "drawRect:" विधि का उपयोग करने पर विचार करें। पूर्व-चित्रकारी (सबव्यू) और "बस-समय-समय" ड्राइंग (drawRect :) के बीच समग्र दृश्य के बीच रेंडर समय को विभाजित करने के लिए, छवि तत्वों के लिए सबव्यू का उपयोग करना जारी रखें। जाहिर है, प्रयोग (स्क्रॉलिंग के दौरान प्रति सेकंड फ्रेम) दिखा सकता है कि इस "नियम-अंगूठे" का उल्लंघन करने से आपके विशेष विचारों के लिए इष्टतम हो सकता है।

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

4

डब्ल्यूडब्ल्यूडीसी वीडियो देखने और एक्सकोड और इंस्ट्रूमेंट्स के साथ कुछ प्रयोग करने के बाद मैं कह सकता हूं कि ब्लेंडिंग ऑफस्क्रीन प्रतिपादन बेहतर है। मिश्रण का मतलब है कि पारदर्शी परतों पर पिक्सल के रंग की गणना करने के लिए सिस्टम को कुछ अतिरिक्त समय की आवश्यकता होती है। आपके पास अधिक पारदर्शी परतें हैं (और इन परतों का बड़ा आकार) तो मिश्रण में अधिक समय लगता है।

ऑफस्क्रीन प्रतिपादन का अर्थ है कि सिस्टम एक और प्रतिपादन पुनरावृत्ति को और अधिक बना देगा। पहले पुनरावृत्ति प्रणाली केवल सीमाओं और क्षेत्र के आकार की गणना करने के लिए विज़ुअलाइज़ेशन के बिना प्रतिपादन करेगी जिसे प्रस्तुत किया जाना चाहिए। अगली पुनरावृत्ति प्रणाली में नियमित प्रतिपादन (गणना किए गए आकार पर निर्भर करता है) यदि आवश्यक हो तो मिश्रण सहित।

ऑफस्क्रीन प्रतिपादन प्रणाली के लिए एक अलग ग्राफिक्स संदर्भ बनाता है और प्रतिपादन के बाद इसे नष्ट कर देता है।

तो आपको ऑफस्क्रीन प्रतिपादन से बचना चाहिए और इसे मिश्रण के साथ प्रतिस्थापित करना बेहतर है।