UIView और CALayer के बीच क्या अंतर हैं?


103

दोनों में अधिकांश समान विशेषताएं हैं, दोनों विभिन्न प्रकार के एनिमेशन का समर्थन करते हैं, दोनों अलग-अलग डेटा का प्रतिनिधित्व करते हैं। UIView और CALayer के बीच क्या अंतर हैं?

जवाबों:


224

IOS पर, प्रत्येक UIView को एक कोर एनिमेशन CALayer द्वारा समर्थित किया गया है, इसलिए आप UIView का उपयोग करते समय CALayers के साथ काम कर रहे हैं, भले ही आपको इसका एहसास न हो। मैक पर NSViews के विपरीत, जो कि कोर एनिमेशन के अस्तित्व में आने से पहले विकसित हुआ था, UIVIVs का उद्देश्य इन कैलमर्स के आसपास हल्के रैपर थे।

जैसा कि मैंने इसी तरह के प्रश्न में वर्णन किया है "मैक / आईफोन पर कैलेयर का उपयोग कब करें?" काम कर रहे हैं, सीधे कैलेयर्स के साथ आप UIViews पर महत्वपूर्ण प्रदर्शन लाभ नहीं देते हैं। UIViews के बजाय CALayers के साथ उपयोगकर्ता इंटरफ़ेस तत्व का निर्माण करने के लिए एक कारण हो सकता है कि यह मैक पर आसानी से पोर्ट किया जा सकता है। UIViews NSViews से बहुत अलग हैं, लेकिन कैलेयर्स दो प्लेटफार्मों पर लगभग समान हैं। यही कारण है कि कोर प्लॉट फ्रेमवर्क अन्य यूआई तत्वों के बजाय कैलेयर्स का उपयोग करके अपने रेखांकन देता है।

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

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


40

रे वेंडरलिच ब्लॉग ( ट्यूटोरियल ) से

कैलेयर्स केवल दृश्य सामग्री के साथ स्क्रीन पर एक आयत का प्रतिनिधित्व करने वाली कक्षाएं हैं। "लेकिन एक मिनट का इंतजार करें," आप कह सकते हैं, "यही उविवि के लिए है!" यह सच है, लेकिन इसके लिए एक चाल है: हर UIView में एक जड़ परत होती है जो इसे खींचती है!


33

सीधे शब्दों में कहें तो, यूआईवीईई यूआईरेस्पोंडर से विरासत में मिला है, उपयोगकर्ताओं से घटनाओं को संभालता है, जिसमें कैलेयर होता है, जो एनएसओबजेक्ट से विरासत में मिला है, मुख्य रूप से रेंडरिंग, एनीमेशन आदि पर ध्यान केंद्रित करता है।


7

UIViewके लिए एक कंटेनर है CALayers। का उपयोग कर UIKit

CALayerजहां हम सामग्री खींचते हैं। का उपयोग करते हुएCoreGraphics

यदि आप कस्टम कंट्रोल जैसे फीचर्स के साथ काम करते हैं, तो सटीक देशी रेंडरिंग के लिए अधिक परतों वाले सिंगल व्यू के साथ आगे बढ़ना बहुत अच्छा होगा। चूंकि CALayersवजन रहित हैं UIView

मैक और आईओएस के लिए सामान्य कंकाल बनाने के लिए, अपने ऐप का उपयोग करके डिज़ाइन का पालन करें CALayers। चूंकि यह दोनों प्लेटफॉर्म में उपलब्ध है।

UIViewस्पर्श इवेंट प्रतिनिधियों का प्रयोग कर प्राप्त की तरह सुविधा होने -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event, tochesStartघटनाओं और अन्य की तरह UIKitसुविधाओं।

CALayersकोर ग्राफिक्स ज्ञान के उपयोग के साथ काम करने के लिए। किसी भी सरल दृश्य प्रतिपादन के UIViewलिए पर्याप्त है।


0

UIView मोबाइल डिवाइस पर कोकोआउट के लिए डिज़ाइन किया गया है। यह कुछ ईवेंट हैंडलर जोड़ता है, जिसे केलेयर ने प्रदान नहीं किया था।


0

UIView: दृश्य में अधिक जटिल पदानुक्रम लेआउट हैं। वे नल, चुटकी, cliks और अधिक की तरह उपयोगकर्ता बातचीत प्राप्त कर सकते हैं। UIViews के साथ काम करना मुख्य धागे पर होता है, इसका मतलब है कि यह CPU शक्ति का उपयोग कर रहा है।

CALayer: दूसरी ओर परतें सरल पदानुक्रम है। इसका मतलब है कि वे स्क्रीन पर खींचने के लिए हल करने और तेज करने के लिए तेज़ हैं। विचारों के विपरीत कोई प्रत्युत्तर श्रृंखला ओवरहेड नहीं है। परतें सीधे GPU पर खींची जाती हैं। यह सीपीयू को बोझ किए बिना एक अलग थ्रेड पर होता है।

अधिक जानकारी के लिए: https://medium.com/@fassko/uiview-vs-calayer-b55d932ff1f5

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.