Pregunta

Recientemente he estado tratando de ahorrar en tiempo de render, reduciendo al mínimo la cantidad de tiempo dedicado a la asignación y la duplicación de los recursos como imágenes mediante el uso de un UIImageViews y UIImages ya asignados.

Lo que trato de hacer es mantener un mapa de todos los UIImages - cada uno único y reasignar a cada uno a varios a UIImageViews, por la demanda del motor de juego. A medida que el juego avanza elimino algunas UIImageViews de la pantalla, y más tarde podría volver a utilizarlas con diferentes UIImages precargados.

La primera vez que crear el UIImageView hago algo como:

  

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

     

[m_ParentView addSubview: m_ImageView];

Y las siguientes veces que simplemente alternar la imagen:

  

[liberación m_ImageView.image];

     

[m_ImageView setImage otherSavedImg];

El problema es que después de que el interruptor, el nuevo tamaño de la imagen como se muestra es idéntico al tamaño inicial de la imagen. Me bypassed el problema que la recreación de la UIImageView cada vez (que parece una pérdida de tiempo), pero estoy preguntando tanto por qué sucede esto y cómo puedo evitarlo.

Gracias,

¿Fue útil?

Solución

Los documentos para UIImageView dicen "Este método ajusta el marco del receptor para que coincida con el tamaño de la imagen especificada." Al llamar "setImage:", el uso de un simple colocador propiedad. Sin cálculo adicional se lleva a cabo. Si necesita volver a ajustar el tamaño del marco de la UIImageView, que tendrá que hacerlo manualmente.

A juzgar por el contexto que le dio, esto parece que va a ser algo que va a hacer algo con frecuencia. Por lo tanto, recomiendo crear una categoría para 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

Ahora, cada vez que se necesita para cambiar una imagen y cambiar el tamaño de la imageView, simplemente import UIImageView + Resizing.h y uso:

[myImageView setImage:anImage resize:YES];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top