2012-07-11 8 views
6

मैं एक ऐसे दृश्य से बाहर निकलने की कोशिश कर रहा हूं जहां कोई उपयोगकर्ता पेंट कर सकता है या कुछ अन्य विचार जोड़ सकता है। IPad1 & 2 सबकुछ ठीक से काम कर रहा है। लेकिन आईपैड 3 पर यह कुत्ते की तरह चलता है। मैं केवल परतों renderInContext विधि का उपयोग कर रहा हूँ।आईपैड 3 रेंडरइन कॉन्टेक्स्ट धीमा - खराब प्रतिपादन प्रदर्शन

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    UIGraphicsBeginImageContextWithOptions(self.viewDrawableViewContainer.frame.size, NO, [UIScreen mainScreen].scale); 
else 
    UIGraphicsBeginImageContext(self.viewDrawableViewContainer.frame.size); 
[self.viewDrawableViewContainer.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

मैं यह शायद cpu जो ipad2 एक, के बराबर है के कारण होता है पता है, लेकिन इसके बारे में 1 सेकंड लेता है। जितना अधिक उपयोगकर्ता पेंट करता है या जोड़ता है, उतना ही लंबा होगा। कभी-कभी 5 सेकंड तक जो वास्तव में अस्वीकार्य है। तो प्रदर्शन में सुधार करने के लिए कोई विकल्प हैं? शायद एक छोटी प्रतिपादन गुणवत्ता सेट करने का कोई मौका - मुझे उच्चतम रेटिना रिज़ॉल्यूशन में प्रतिपादन की आवश्यकता नहीं है ...

मैं किसी भी मदद की सराहना करता हूं! अग्रिम धन्यवाद

+1

क्या आप अनुमान लगा सकते हैं कि कौन से विचार खींचे जाएंगे? यदि ऐसा है तो आप पृष्ठभूमि में ड्राइंग कर सकते हैं और परिणाम कैश कर सकते हैं, जो डिवाइस को फ्रीज नहीं करेगा। –

+0

संकेत के लिए ठीक है धन्यवाद, मैं पृष्ठभूमि में एक छवि बना सकता हूं लेकिन समस्या यह है कि उपयोगकर्ता कुछ पाठ लिख सकता है और जाने पर टैप कर सकता है। फिर मुझे उपयोगकर्ता बातचीत के तुरंत बाद चित्र करना होगा क्योंकि दृश्य पर टैप करने के बाद दृश्य बंद हो जाएगा। लेकिन धन्यवाद, हो सकता है कि मैं बंद एनीमेशन प्रदर्शन कर रहा हो सकता है। मैं इसे आज़मा दूंगा ... तो प्रतिपादन प्रदर्शन में सुधार करने के कोई अन्य तरीके नहीं हैं? – Alexander

+0

दुर्भाग्य से नहीं, अनिवार्य रूप से एक ही सीपीयू पर 4 बार मंथन करते हुए कई पिक्सेल बस प्रदर्शन को मार देते हैं। एनिमेशन के साथ इसे मास्क करना समस्या को हल करने का एक शानदार तरीका है, और यह है कि ऐप्पल यह कैसे करता है। यदि आप उपयोगकर्ता को देखने के लिए अनुमति दे रहे हैं, तो आप क्या आकर्षित कर रहे हैं? क्या कोई यूआईएममेज इस दृष्टिकोण का समर्थन नहीं कर रहा है कि आप किसी संदर्भ में दृश्य प्रस्तुत करने के बजाय तुरंत बाहर खींच सकते हैं? –

उत्तर

9

आप कम रिज़ॉल्यूशन पर प्रतिपादन करके गति बढ़ा सकते हैं। 1.0 से कम UIGraphicsBeginImageContextWithOptions स्केल फैक्टर का उपयोग करें, उदा। 0.5।

इसके अलावा, अगर आपको अल्फा की आवश्यकता नहीं है तो आपको अपारदर्शी ध्वज के लिए YES पास करके एक छोटी गति वृद्धि मिल सकती है। मैंने खुद को अंतर नहीं दिया है।

+0

ने इसे आजमाया। मैंने एनएसडीएटी * डी 1 = [एनएसडीएटी तिथि] का उपयोग किया; ... एनएसडीएटी * डी 2 = [एनएसडीएटी तिथि]; [डी 2 समय इंटरवल सेन्सडेट: डी 1]; यह मापने के लिए कि कितना समय लगता है, और कोई फर्क नहीं पड़ता। आईपैड 3 बहुत धीमा है तो आईपैड 2 (~ 0.3sec से ~ 1.7sec) – Nadav

16

संदर्भ में प्रस्तुत करने से पहले आप अपने संदर्भ में इंटरपोलेशन गुणवत्ता को संशोधित करके प्रतिपादन गति भी बढ़ा सकते हैं। मैं स्केल फैक्टर को बदलकर इस बदलाव के साथ बहुत अधिक गति स्क्रीनशॉट-टिंग प्राप्त करने में सक्षम था।

बेशक आप दोनों का उपयोग कर सकते हैं और आपको गुणवत्ता को किसी को भी सेट करने की आवश्यकता नहीं है, कम अभी भी मेरे लिए एक सुधार था।

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone); 

इसके अलावा, पैमाने कारक के लिए के रूप में उल्लेख पिछले जवाब में यकीन है कि अपने नए पैमाने कारक मूल अर्थात की एक बहु है अगर स्क्रीन पैमाने 1.0 आप .5 और न .8 की तरह कुछ करना चाहिए है या नहीं। .8 का उपयोग करने से अधिक जानकारी की गणना हो जाएगी (क्योंकि यह एक पैमाने भी नहीं है) और इस प्रकार इसे 1.0 का उपयोग करने से धीमा कर देता है।

बेशक यह सभी के लिए एक अच्छा समाधान नहीं होगा।

+2

'CGContextSetInterpolationQuality' अद्भुत चीजें बनाता है! मेरे मामले में मैं कोशिकाओं में छवियों के साथ 'यूआईसीओलेक्शन व्यू' की परत प्रस्तुत कर रहा हूं - बहुत महत्वपूर्ण स्क्रॉल करते समय मध्यम/निम्न वृद्धि फ्रेम दर पर उच्च इंटरपोलेशन गुणवत्ता बदलना। – brigadir

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