2014-10-26 6 views
6

मैं एक ऐसा गेम बना रहा हूं जो बटन क्लिक पर एक प्लेइंग कार्ड उत्पन्न करता है। मैं यह कोड करने के लिए इस प्रयोग का उपयोग कर रहा हूं:प्रोग्रामेटिक रूप से जोड़े गए UIImageView

var imageView = UIImageView(frame: CGRectMake(CGFloat(pos), 178, 117, 172)); 
    var image = UIImage(named: "\(deck[Int(card)])_of_\(suits[Int(arc4random_uniform(4))])") 
    imageView.image = image 
    self.view.addSubview(imageView) 

लेकिन मेरे पास एक और बटन है जो गेम को रीसेट करता है। मैं केवल प्रोग्राम जोड़े गए कार्ड को हटाने में सक्षम होना चाहता हूं। इस पर किसी भी मदद की सराहना की जाएगी। BTW

imageView.removeFromSuperview() // this removes it from your view hierarchy 
imageView = nil;     // if your reference to it was a strong reference, make sure to `nil` that strong reference 

, जैसा कि आप जानते हैं, UIImage(named:...) स्मृति में इमेज को कैश देगा:

उत्तर

8

आप कुछ संपत्ति में कि imageView का ट्रैक रख सकते हैं, और जब आप इसे आप बस निकालना चाहते हैं। यदि आप इसे चाहते हैं, ठीक है, लेकिन यदि नहीं, तो आप उस संसाधन के पूर्ण योग्य मार्ग के साथ UIImage(contentsOfFile:...) का उपयोग करना चाहेंगे। यदि आप UIImage(named:...) का उपयोग करते हैं, तो UIImageView हटा दिए जाने के बाद भी छवि स्मृति में रहेगी। प्रलेखन कहते हैं:

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

+0

इसके लिए धन्यवाद। जैसा कि आप शायद बता सकते हैं, मैं इसके लिए बहुत नया हूं और यह मेरा पहला ऐप है। मैं छवियों को कैश नहीं करना चाहता हूं इसलिए मैं इसके बजाय 'contentOfFile' का उपयोग करने पर आपकी सलाह लेने की कोशिश कर रहा हूं। मैंने इसमें देखा है और मुझे लगता है कि मुझे ऐसा कुछ चाहिए ... 'var path: स्ट्रिंग? = NSBundle.pathForResource ("ace_of_spades", ofType: "png", inDirectory: "चित्र") ' तो इस तरह छवि को लोड: ' वर छवि = UIImage (contentsOfFile: पथ) ' लेकिन यह एक फेंक है त्रुटि। कोई सलाह? –

+0

'pathForResource' एक क्लास विधि नहीं है। यह एक उदाहरण विधि है। तो आपको यह निर्दिष्ट करना होगा कि किस 'NSBundle' उदाहरण का उपयोग करना है, उदा। 'NSBundle.mainBundle()। PathForResource (...)'। चाहे आप प्रतिपादन का उपयोग करें 'इन डायरेक्टरी' है या बिना किसी पर निर्भर करता है कि आपके बंडल में छवियों को ठीक से संग्रहीत किया जाता है। (अक्सर वे बंडल के शीर्ष स्तर पर होते हैं, भले ही वे परियोजना में "समूह" में सूचीबद्ध हों।) मैं परियोजना को देखे बिना नहीं कह सकता। – Rob

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

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