2009-11-02 14 views
46

मेरे पास UIImage है जो मैं UIView पर आकर्षित करना चाहता हूं। लेकिन UIImageView बनाने और इसे सबव्यूव के रूप में जोड़ने के बजाय, मैं -drawRect: को ओवरराइट करना चाहता हूं और सीधे अपना UIView आकर्षित करना चाहता हूं।UIImage या सीधे इन-ड्राउक्ट कैसे आकर्षित करें :?

- (void)drawRect:(CGRect)rect { 
    CGContextRef myContext = UIGraphicsGetCurrentContext(); 

    UIImage *img = [UIImage imageNamed:@"foo.png"]; 

    // how to draw the directly into the view now? 
} 

उत्तर

83

कॉल [img drawInRect:rect];:

उदाहरण के लिए, मेरे कोड की तरह दिखता है।

+4

भी '[img drawAtPoint: point]' भी है, हालांकि मैं 'drawInRect:' पसंद करता हूं। –

+0

यदि आप कर सकते हैं इस तकनीक से बचने की कोशिश करें; drawInRect और drawAtPoint बहुत भयानक प्रदर्शन है। – TomSwift

+1

धन्यवाद। मैंने उन विशेषताओं के लिए विशेष रूप से उपयोगी (समान एनएसएसटींग UIKit ड्राइंग ऐड-ऑन के साथ संयुक्त) पाया जिनमें पृष्ठभूमि छवियां और टेक्स्ट शामिल है और फिर स्क्रॉल व्यू में जोड़ा गया है। DrawRect में पृष्ठभूमि छवि और पाठ को एक साथ खींचना: परतों को मिश्रित करने से क्वार्ट्ज से बचाता है (जैसा कि यदि आप UIImageView और UILabel सबव्यू दृष्टिकोण का उपयोग करते हैं तो ऐसा होगा) जिसका प्रदर्शन स्क्रॉलिंग प्रदर्शन पर महत्वपूर्ण प्रभाव है – cidered

30

बीटीडब्ल्यू, आपको drawRect विधि में छवि फ़ाइल लोड नहीं करना चाहिए। क्योंकि जब भी दृश्य को अद्यतन करने की आवश्यकता होती है तो विधि को बुलाया जाता है। इसलिए, यह (निश्चित रूप से, लोडिंग प्रक्रिया) चलने के दौरान कई बार बुलाया जा सकता है। (इसके अलावा, OS2.x की छवि नामित विधि में एक बग है - छवि को कैश नहीं किया गया है और इसे लीक किया गया है।)

इसलिए, आप प्रारंभिक विधि में फ़ाइल को लोड करना बेहतर होगा, ड्रारक्ट में नहीं।

+0

उस उपयोगी जानकारी के लिए धन्यवाद। दुर्भाग्य से, आप किस "प्रारंभिक" विधि का मतलब रखते हैं? – geforce

+0

वह शायद आपके द्वारा किए जा रहे कार्यों के आधार पर '+ (शून्य) प्रारंभिक ', या सामान्य' init' विधि 'का अर्थ है। – Mason

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