В чем разница между 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
является лучшей идеей.