2010-10-01 9 views
14

मैं टेबल सेल में इतनी सारी छवियां प्रदर्शित करना चाहता हूं। मैं एक छवि दिखाने के लिए दो तरीकों को जानता था।UIImageView और drawInRect के बीच क्या अंतर है?

एक UIImageView के लिए उदाहरण बनाकर और यह

CGRect rect=CGRectMake(x,y,width,height); 
UIImageView *image=[[UIImageView alloc]initWithFrame:rect]; 
[image setImage:[UIImage imageNamed:@"sample.jpg"]]; 

एक अन्य विधि है दिखाने के है,

CGRect rect=CGRectMake(x,y,width,height); 
[[UIImage imageNamed:@"sample.jpg"] drawInRect:rect]; 

अब, मेरे सवाल है, इन दोनों के बीच अंतर क्या है? कौन सा कुशल है? या कुछ और समारोह इस से बेहतर उपलब्ध है?

अग्रिम धन्यवाद ....

उत्तर

33

drawInRect: विधि का उपयोग कर कोरग्राफिक्स ने सीपीयू का उपयोग कर सक्रिय CGContext में छवि खींचा है। मान लें कि आप UIView की drawRect: विधि में हैं, यह छवि को दृश्य के बफर में पेंट करेगा।

UIImageView धीमे drawRect: का उपयोग करने के बजाय बैकिंग बफर के रूप में जो भी छवि सौंपा गया है उसका उपयोग करता है। जब GPA क्वार्ट्जकोर के माध्यम से स्क्रीन को मिश्रित किया जाता है तो GPU तब इस बफर को सीधे संदर्भित करता है।

+0

+1 के लिए धन्यवाद। मैं थोड़ी देर के लिए उन दोनों के बीच भेद के चारों ओर अपने सिर को पाने की कोशिश कर रहा हूं। तो 'UIImageView' हमेशा जाने का रास्ता है? क्या ऐसे मामले हैं जहां छवि को 'drawRect: '' सीधे आईएनजी बेहतर है? –

+0

एकमात्र स्थिति जिसे मैं धीमा कर सकता हूं वह है जब कई छोटी छवियों से एक स्थिर पृष्ठभूमि दृश्य को कंपोजिट करना और फिर पृष्ठभूमि को बदलने के बिना इसके ऊपर सामग्री को एनिमेट करना। उस स्थिति में जीपीयू को शीर्ष पर चलती सामग्री और प्रत्येक फ्रेम के पूरे पृष्ठभूमि दृश्य को दोबारा जोड़ना होगा। यह निश्चित रूप से एक कोने का मामला है। – rpetrich

+3

एक ऐसी स्थिति जहां '-ड्राउरक्ट:' एक लाभ है जब आप चिकनी स्क्रॉलिंग प्रदर्शन चाहते हैं और आपके पास पीएनजी हैं जिनमें पारदर्शिता है। पुराने हार्डवेयर पर, जीपीयू फ्रेम को छोड़ दिए बिना एक ही समय में पारदर्शी विचारों को स्क्रॉल करने में संभाल नहीं सकता है। इसके चारों ओर एक तरीका यह है कि आप अपने सभी कंपोजिटिंग को '-ड्राउरक्ट:' में करें, जो इस भारी जीपीयू काम को एक बार भारी CPU नौकरी में परिवर्तित करता है। ग्राफिक्स तीव्र तालिका दृश्य कक्षों में यह अपेक्षाकृत सामान्य परिदृश्य है, हालांकि यह तेजी से GPUs के कारण आईफोन 4 और आईपैड के साथ कोई समस्या नहीं है। –

0

UIImageView एक UIView उपवर्ग है। इसे दृश्य पदानुक्रम में जोड़कर आपको सभी मुफ्त लाभ मिलते हैं: एनिमेशन, आकार गुण, एफ़िन ट्रांसफॉर्म इत्यादि। इसके अलावा, आप अंतर्निहित UIImage किसी भी समय बदलना चाहते हैं।

दूसरी ओर, drawInRect: बुला बस, छवि, जहां आप इसे नहीं कहेंगे, लेकिन UIView पदानुक्रम के साथ बातचीत नहीं आकर्षित करेगा ताकि आप पदानुक्रम पर यह होने से लाभ के किसी भी लाभ नहीं है।

मुझे लगता है कि होगा (यह कोशिश की है नहीं), उस छवि को ड्राइंग सीधे तेजी से होता है, लेकिन मैं कर रहा एक UIImageView एक बेहतर विचार है अधिकांश मामलों में लगता होगा।

+0

अजीब रूप से पर्याप्त है, छवि को चित्रित करना धीमा है क्योंकि इसे 'UIImageView' – rpetrich

+0

पर निर्दिष्ट करने से कम प्रत्यक्ष है, धन्यवाद, धन्यवाद! – pgb

+0

एक शानदार उत्तर के लिए आपके मूल्यवान उत्तरों –

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