множественная настройка изображения для UIImageView

StackOverflow https://stackoverflow.com/questions/1083438

  •  23-08-2019
  •  | 
  •  

Вопрос

Недавно я пытался сэкономить время рендеринга, минимизируя количество времени, затрачиваемого на выделение и дублирование ресурсов в виде изображений, используя уже выделенные UIImageViews и UIImages.

Что я пытаюсь сделать, так это поддерживать карту всех UIImages - каждый из которых уникален, и переназначать каждый из них нескольким UIImageViews по требованию игрового движка.По ходу игры я удаляю некоторые UIImageViews с дисплея, и позже могу повторно использовать их с другими предварительно загруженными UIImages.

В первый раз, когда я создаю UIImageView, я делаю что-то вроде:

m_ImageView = [[UIImageView alloc] иницИалиЗация с изображением :Начальный размер];

[m_ParentView добавляет subview:m_ImageView];

И в следующие разы я просто переключаю изображение:

[m_ImageView.выпуск изображения];

[m_ImageView Устанавливает изображение других сохраненных изображений];

Проблема в том, что после переключения отображаемый новый размер изображения идентичен исходному размеру изображения.Я обошел проблему, каждый раз воссоздавая UIImageView (что кажется пустой тратой времени), но мне интересно, почему это происходит и как я могу это предотвратить.

Спасибо,

Это было полезно?

Решение

В документах для UIImageView говорится: "Этот метод настраивает рамку приемника в соответствии с размером указанного изображения". При вызове "setImage:" вы используете простой установщик свойств.Никакого дополнительного пересчета не производится.Если вам нужно скорректировать размер фрейма UIImageView, вам придется сделать это вручную.

Судя по приведенному вами контексту, похоже, что это будет то, что вы будете делать довольно часто.Таким образом, я рекомендую создать категорию для UIImageView:

UIImageView+ Изменение размера.h:

@interface UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize;

@end

UIImageView+ Изменение размера.m:

@implementation UIImageView (Resizing)

- (void) setImage:(UIImage *)newImage resize:(BOOL)shouldResize {
  [self setImage:newImage];
  if (shouldResize == YES) {
    [self sizeToFit];
  }
}

@end

Теперь, всякий раз, когда вам нужно изменить изображение и изменить размер ImageView, просто #import UIImageView+Resizing.h и используйте:

[myImageView setImage:anImage resize:YES];
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top