2009-07-05 6 views
2

Kürzlich habe ich versucht, Renderzeit zu sparen durch Minimierung der Zeitaufwand für die Zuweisung und Duplizierung von Ressourcen als Bilder mit einem bereits zugeordneten UIImageViews und UIImages.mehrere Einstellung des Bildes für UIImageView

Was ich versuche zu tun ist, eine Karte aller UIImages zu erhalten - jeder einzigartig, und jedem auf Wunsch der Spielengine mehrere UIImageViews zuzuweisen. Während das Spiel fortschreitet, entferne ich einige UIImageViews aus dem Display und später könnte sie mit verschiedenen vorinstallierten UIImages wiederverwendet werden.

Das erste Mal, dass ich die UIImageView schaffe ich so etwas wie:

m_ImageView = [[UIImageView alloc] initWithImage: initialImg];

[m_ParentView addSubview: m_ImageView];

Und die folgenden Zeiten schalte ich einfach das Bild:

[m_ImageView.image release];

[m_ImageView setImage otherSavedImg];

Das Problem ist, dass nach dem Wechsel die neue Bildgröße wie angezeigt mit der ursprünglichen Bildgröße identisch ist. Ich umging das Problem, indem ich die UIImageView jedes Mal neu erstellte (was wie eine Zeitverschwendung scheint), aber ich frage mich, warum das passiert und wie ich es verhindern kann.

Danke,

Antwort

3

Die Dokumentation für UIImageView sagen: „Dieses Verfahren den Rahmen des Empfängers passt die Größe des bestimmten Bildes zu entsprechen.“ Wenn Sie "setImage:" aufrufen, verwenden Sie einen einfachen Property Setter. Es wird keine zusätzliche Neuberechnung durchgeführt. Wenn Sie die Größe des Rahmens des UIImageView anpassen müssen, müssen Sie dies manuell tun.

Gemessen an dem Kontext, den Sie angegeben haben, scheint dies etwas zu sein, das Sie etwas häufiger machen werden. Als solche, empfehle ich eine Kategorie für UIImageView erstellen:

UIImageView + Resizing.h:

@interface UIImageView (Resizing) 

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize; 

@end 

UIImageView + Resizing.m:

@implementation UIImageView (Resizing) 

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize { 
    [self setImage:newImage]; 
    if (shouldResize == YES) { 
    [self sizeToFit]; 
    } 
} 

@end 

Nun, wenn Sie ein Bild ändern müssen und die Größe der Imageview, #import einfach UIImageView + Resizing.h und Verwendung:

[myImageView setImage:anImage resize:YES]; 
+0

Hey Dave, Danke für die Antwort, nachdem ich es gelesen habe ging ich zurück und lese das UIImageView-Dokument von vorne nach hinten und sie erwähnen in der Tat so etwas: > Einstellung der Image-Eigenschaft ändert nicht die Größe eines UIImageView. Rufen Sie sizeToFit auf, um die Größe der Ansicht an das Bild anzupassen. Sehr seltsam, sie tun es nicht mit dem UIImage-Set, aber hey - du hast mich einen Tag gerettet. -Adi – Adi

+0

Ha, ich habe die sizeToFit Methode vergessen! Guter Fund. Ich würde jedoch empfehlen, eine Kategorie zu erstellen, um das Image und sizeToFit festzulegen, damit es * Ihren * Code dekompliziert. –

+0

Ich ging zurück und änderte die Antwort, um "sizeToFit" zu verwenden. =) –