l'impostazione multipla dell'immagine per UIImageView
-
23-08-2019 - |
Domanda
Di recente ho cercato di risparmiare sulle tempo di rendering, riducendo al minimo la quantità di tempo speso per l'assegnazione e la duplicazione delle risorse come immagini utilizzando un UIImageViews e UIImages già assegnati.
Quello che cerco di fare è di mantenere una mappa con tutti UIImages - tutti pezzi unici, e riassegnare a ciascuno di a diversi UIImageViews, dalla domanda del motore di gioco. Mentre il gioco procede a rimuovere alcuni UIImageViews dalla visualizzazione, e poi li potrebbero riutilizzare con diverse UIImages precaricati.
La prima volta che creo l'UIImageView che faccio qualcosa di simile:
m_ImageView = [[UIImageView alloc] initWithImage: initialImg];
[m_ParentView addSubview: m_ImageView];
E i seguenti tempi ho semplicemente passare l'immagine:
[rilascio m_ImageView.image];
[m_ImageView setImage otherSavedImg];
Il problema è che dopo l'interruttore, la nuova dimensione dell'immagine come visualizzato è identica alla dimensione immagine iniziale. Ho bypassato il problema ricreando l'UIImageView ogni volta (che sembra una perdita di tempo), ma mi chiedo sia il motivo per cui questo accade e come posso impedirlo.
Grazie,
Soluzione
La documentazione per UIImageView dire "Questo metodo regola il telaio del ricevitore corrisponda alla dimensione dell'immagine specificata." Quando si chiama "setImage:", si sta utilizzando un semplice setter di proprietà. No ricalcolo in più è fatto. Se è necessario regolare la dimensione del telaio del UIImageView, dovrete farlo manualmente.
A giudicare dal contesto hai dato, questo sembra come sarà qualcosa vi ritroverete a fare un po 'di frequente. In quanto tale, vi consiglio di creare una categoria per UIImageView:
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
Ora, ogni volta che è necessario modificare l'immagine e ridimensionare l'ImageView, semplicemente # import UIImageView + Resizing.h ed impiego:
[myImageView setImage:anImage resize:YES];