ajuste múltiplo da imagem para UIImageView
-
23-08-2019 - |
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,
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];