2014-10-26 17 views
6

Ich erstelle ein Spiel, das eine Spielkarte bei einem Klick erzeugt. Ich benutze diesen Code, um dies zu tun:Entfernen programmgesteuert hinzugefügt 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) 

Aber ich habe eine andere Schaltfläche, die das Spiel zurückgesetzt. Ich möchte nur die programmatisch hinzugefügten Karten entfernen können. Jede Hilfe dazu wird geschätzt.

Antwort

8

können Sie verfolgen, dass imageView in irgendeiner Eigenschaft, und wenn Sie es Sie einfach entfernen möchten:

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 

BTW, wie Sie vielleicht wissen, UIImage(named:...) werden die Bilder im Speicher zwischenspeichern. Wenn Sie das möchten, in Ordnung, aber wenn nicht, möchten Sie vielleicht UIImage(contentsOfFile:...) mit dem vollständig qualifizierten Pfad zu dieser Ressource verwenden. Wenn Sie UIImage(named:...) verwenden, bleibt das Bild im Speicher, auch nachdem die UIImageView entfernt wurde. Da die Dokumentation sagt:

Wenn Sie eine Bilddatei, die nur einmal angezeigt werden und wollen, um sicherzustellen, dass es nicht auf das System des Cache hinzugefügt wird, sollten Sie stattdessen Ihr Bild erstellen imageWithContentsOfFile: verwenden. Dadurch wird Ihr Single-Use-Image aus dem System-Image-Cache entfernt, wodurch sich die Speicherverwendungsmerkmale Ihrer App möglicherweise verbessern.

+0

Danke dafür. Wie du wahrscheinlich weißt, bin ich sehr neu und das ist meine erste App. Ich möchte die Bilder nicht zwischenspeichern, daher versuche ich, Ihren Hinweis zu verwenden, stattdessen "contentsOfFile" zu verwenden. Ich habe mir das angeschaut und ich glaube ich brauche so etwas ... 'var pfad: String? = NSBundle.pathForResource ("ace_of_spades", ofType: "png", inDirectory: "Bilder") ' dann laden Sie das Bild wie folgt aus: ' var image = UIImage (contentsOfFile: path) ' Aber dies ist ein Wurf Error. Irgendein Rat? –

+0

'pathForResource' ist keine Klassenmethode. Es ist eine Instanzmethode. Sie müssen also angeben, welche 'NSBundle'-Instanz zu verwenden ist, z. 'NSBundle.mainBundle(). PathForResource (...)'. Ob Sie die Wiedergabe "inDirectory" verwenden oder ob die Wiedergabe nicht erfolgt, hängt davon ab, wo genau die Bilder in Ihrem Bundle gespeichert sind. (Oft sind sie in der obersten Ebene des Bundles, obwohl sie in einer "Gruppe" im Projekt aufgeführt sind.) Ich kann nicht sagen, ohne das Projekt zu sehen. – Rob

Verwandte Themen