Pergunta

Recentemente eu estive tentando economizar em tempo de render, minimizando a quantidade de tempo gasto na alocação e duplicação de recursos como imagens usando um UIImageViews e UIImages já atribuídos.

O que eu tento fazer é manter um mapa de todos os UIImages - cada um único, e transferir cada um para a vários UIImageViews, pela demanda do motor de jogo. Como os progressos de jogo eu remover alguns UIImageViews de exposição, e, posteriormente, pode reutilizá-los com diferentes UIImages pré-carregados.

A primeira vez que eu criar o UIImageView eu fizer algo como:

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

[m_ParentView addSubview: m_ImageView];

e as seguintes vezes eu simplesmente mudar a imagem:

[liberação m_ImageView.image];

[m_ImageView setImage otherSavedImg];

O problema é que após a mudança, o novo tamanho da imagem como exibido é idêntica ao tamanho inicial da imagem. I contornado o problema recriando o UIImageView cada vez (o que parece ser um desperdício de tempo), mas eu estou querendo tanto por que isso acontece e como posso evitá-lo.

Obrigado,

Foi útil?

Solução

Os docs para UIImageView dizer "Este método ajusta a estrutura do receptor para corresponder ao tamanho da imagem especificada." Ao chamar "setImage:", o seu usando um setter simples propriedade. No recálculo extra é feito. Se você precisa de reajustar o tamanho do quadro do UIImageView, você vai ter que fazer isso manualmente.

A julgar pelo contexto que você deu, isso parece que vai ser algo que você vai estar fazendo um pouco com freqüência. Como tal, eu recomendo a criação de uma categoria 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

Agora, sempre que você precisar alterar uma imagem e redimensionar a imageView, simplesmente #import UIImageView + Resizing.h e uso:

[myImageView setImage:anImage resize:YES];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top