В чем разница между UIImageView и drawInRect? - PullRequest
14 голосов
/ 01 октября 2010

Я хочу отображать так много изображений в ячейках таблицы. Я знал два способа показать изображение.

Один создает экземпляр для UIImageView и показывает его

CGRect rect=CGRectMake(x,y,width,height);
UIImageView *image=[[UIImageView alloc]initWithFrame:rect];
[image setImage:[UIImage imageNamed:@"sample.jpg"]];

Другой метод,

CGRect rect=CGRectMake(x,y,width,height);
[[UIImage imageNamed:@"sample.jpg"] drawInRect:rect];

Теперь мой вопрос: в чем разница между этими двумя? Какой из них эффективен? Или какая-то другая функция доступна лучше, чем эта?

Заранее спасибо ....

Ответы [ 2 ]

33 голосов
/ 01 октября 2010

Использование метода drawInRect: заставило CoreGraphics нарисовать изображение в активном CGContext с использованием ЦП. Предполагая, что вы используете UIView drawRect: метод, это закрасит изображение в буфер представления.

UIImageView использует любое назначенное ему изображение в качестве резервного буфера вместо использования более медленного drawRect:. Затем графический процессор обращается к этому буферу напрямую, когда экран скомпонован через QuartzCore.

0 голосов
/ 01 октября 2010

UIImageView является подклассом UIView. Добавив его в иерархию представлений, вы получите все бесплатные преимущества: анимацию, свойства размера, аффинное преобразование и т. Д. Кроме того, вы можете изменить базовый UIImage в любое время.

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

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

...