ios - Custom UIView drawing with layoutSubviews vs drawRect -


क्या CAShapeLayers का ड्राइंग को drawRect () या layoutSubviews से कॉल किया जाना चाहिए () ?

यूआईवीओव्स पर एप्पल के प्रलेखन के अनुसार, ड्राइंग ऑपरेशन को drawRect () में रखा जाना चाहिए।

हालांकि यह केविन कैथी के WWDC सत्र में मामला नहीं है: (जहां वह एक कस्टम यूआईवी्यूव्यू बनाने की प्रक्रिया को दर्शाता है जो कि इंटरफ़ेस बिल्डर में पहुंच योग्य है)।

अपने प्रदर्शन के दौरान वह लेआउट एसयूवीएक्स , drawRect के बजाय

उसका स्पष्टीकरण यह था कि:

यदि मैं drawRect को लागू करना था, तो वह नहीं जा रहा है हमें सर्वश्रेष्ठ प्रदर्शन प्राप्त करने के लिए; जबकि, उपलक्षकों और उप-दृश्यों का उपयोग करने से हमें वास्तव में अच्छा प्रदर्शन प्राप्त हो रहा है।

मैंने स्टैक ओवरफ्लो पर अब तक क्या पढ़ा है, ऐसा लगता है कि drawRect () को ओवरराइड कर रहा है विधि कम प्रदर्शन हो सकती है यह आंशिक रूप से setNeedsDisplay मैन्युअल रेड्राइज महंगा होने के कारण होता है।

लेकिन एप्पल डॉक्यूमेंटेशन और वास्तविक दुनिया के अनुप्रयोगों के माध्यम से देख रहे हैं। यह समझ में आता है कि drawRect () को देखने के ड्राइंग के लिए जिम्मेदार होना चाहिए, और layoutSubviews () हैंडलिंग स्थिति।

< Div class = "post-text" itemprop = "text">

मैं कहूंगा कि यह निर्भर करता है। अगर आपके आकार का आकार ऑटो लेआउट सिस्टम पर निर्भर होने वाला है तो यह लेआउट सबव्यू बनाम ड्रॉ रेक्ट में आरेखण करने के लिए फायदेमंद हो सकता है।

सबसे पहले, क्यों लेआउट सबव्यूएड्स का बेहतर प्रदर्शन होगा? ठीक है कि मेरे पास एक UIView (मेरे पैरेंट व्यू) है जो एक सर्किल व्यू (मेरी सबव्यू) को चित्रित कर रहा है जो आकृति परत का उपयोग कर रहा है उस चक्र का आकार मेरे माता-पिता दृश्य में चौड़ाई और ऊँचाई बाधा द्वारा निर्धारित किया जाता है। माता-पिता के दृश्य पर चौड़ाई / ऊंचाई बाधाओं को बदलते समय मुझे केवल चक्र को फिर से तैयार करना पड़ता है। यह एक ऐसा उदाहरण है जहां लेआउट सबव्यू में आरेखण कोड होना फायदेमंद है क्योंकि बाधाओं को बदलते समय मुझे केवल आकृति परत को दोबारा बनाने की आवश्यकता है

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

    अगर सर्किल व्यू नहीं है ऑटो लेआउट सिस्टम पर निर्भर और यूआई के लेआउट की परवाह किए बिना किसी भी समय बदला जा सकता है, फिर यह संभवतः ड्रॉ रेक्टिंग में ड्रॉइंग रखने के लिए अधिक फायदेमंद होगा क्योंकि यह लगातार अद्यतन किया जा सकता है। मुझे लगता है कि यह एक आदर्श स्थिति से भी कम है क्योंकि आईओएस में अधिक UI ऑटो लेआउट का उपयोग करने के अनुरूप है, इसलिए लेआउट सबव्यूज़ का उपयोग करने की सिफारिश।


  • Comments