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,

È stato utile?

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];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top