2012-06-15 16 views
9

मेरे पास UISmrollViews के साथ UISmrollView और ऑब्जेक्ट्स की संख्या (UIView रचनाएं) हैं। UIImageViews में से कुछ के पास राउंड सीमा है (मैं इसके लिए myImageView.layer.masksToBounds = YES; का उपयोग करता हूं)। अन्य में आयताकार सीमाएं और उनमें छवि का हिस्सा है (मैं इस के लिए इंटरफेस बिल्डर में Clip subviews संपत्ति का उपयोग करता हूं)।क्लिपटॉबाउंड्स और मास्क टॉबाउंड प्रदर्शन समस्या

मुद्दा मैंने पाया कि स्क्रॉल करते हुए कि क्लिप गुण जोरदार प्रदर्शन को प्रभावित कर रहा है:

आइपॉड टच (4 पीढ़ी) की रूपरेखा के परिणामों के लिए:

    सक्षम क्लिप गुण (दोनों या एक के साथ
  • उन्हें) मैं चारों ओर 30 एफपीएस है स्क्रॉल विकलांग क्लिप गुण मैं सभी 60 एफपीएस के साथ
  • स्क्रॉल करते समय

मैं वास्तव में, जबकि कुछ छवियों को गोल सीमाओं और दूसरे को आयताकार सीमाओं (छवि का हिस्सा दिखाने के लिए) पर क्लिप करने की आवश्यकता है। तो, मेरा प्रश्न यह है कि प्रदर्शन में सुधार करने के लिए किन तरीकों से हैं? ऐसा करने के लिए निम्न स्तर के तरीके हो सकते हैं (drawRect: या कुछ), या हो सकता है कि यह अल्फा मास्किंग के आसपास खेलने के लिए उपयोगी हो या मैं कुछ गलत करूँ?

#import <QuartzCore/QuartzCore.h> 

// ... 

view.layer.shouldRasterize = YES; 

यह rastersize देगा:

उत्तर

30

जब आप रेखांकन गहन मास्क और बातें, प्रदर्शन (अक्सर कई बार नाटकीय रूप से) में सुधार करने के लिए एक सरल और आसान तरीका है कि आइटम के लिए परत पर YES को shouldRasterize स्थापित करने के लिए है एक बफर में देखें, इसलिए यह लगातार पुनः प्रस्तुत नहीं किया जाता है। यह प्रत्येक दृश्य के लिए एक अतिरिक्त मेमोरी लेगा, इसलिए आपको स्क्रॉल करते समय दृश्यों को वास्तव में कोशिश करने और पुन: उपयोग/पुन: उपयोग करना चाहिए, जैसा कि तालिका दृश्य करता है।

रेटिना प्रदर्शन आप भी rasterizationScale के लिए एक उपयुक्त मूल्य निर्धारित करने की आवश्यकता पर सही व्यवहार के लिए:

view.layer.rasterizationScale = view.window.screen.scale; // or [UIScreen mainScreen] 

मैं स्क्रॉल तस्वीर दीर्घाओं, जहां प्रत्येक आइटम कोने गोल था जैसी चीजों के लिए इस के साथ बड़ी सफलता मिली है, छाया, आदि

+0

अच्छी सलाह! लेकिन अब यह वास्तव में मदद करता है जब मैं इस संपत्ति को पूरे दृश्य में लागू करता हूं (गोलाकार छवि दृश्य और अंदर टेक्स्ट लेबल के साथ)। इस मामले में पाठ इतना बदसूरत हो जाता है .. अगर मैं इसे केवल गोल छवि दृश्य पर लागू करता हूं तो इसे लगभग कोई प्रभाव नहीं पड़ता है। – Lloyd18

+1

आह, क्षमा करें। रेटिना समर्थन के लिए, 'view.layer.rasterizationScale = [[UIScreen मुख्यस्क्रीन] स्केल] सेट करें। यह सब कुछ कुरकुरा करना चाहिए। मैंने अपना जवाब अपडेट कर लिया है। –

+0

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

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