В чем разница между UIImageView и drawInRect?

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

Один создает экземпляр в 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];

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

Спасибо заранее....

Ответы

Ответ 1

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

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

Ответ 2

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

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

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