Производительность CALayer и производительность UIImageView - PullRequest
6 голосов
/ 03 июля 2010

Я заметил, что некоторые вещи, которые я делаю с изображениями в своем приложении, я мог бы делать вместо этого со свойствами CALayer (то есть с границами, тенями, градиентами и т. Д.).Поэтому мне интересно, в общем, лучше ли использовать CALayers и тому подобное, или просто делать все это в фотошопе и использовать UIImage (View) для того, что мне нужно?Производительность прокрутки была довольно медленной с тенями и т.п., поэтому я в основном пытаюсь найти каждую небольшую оптимизацию, какую только смогу.

Справочная информация: я просто прокручиваю кучу изображений по вертикали.Что-то вроде приложения фото.Это все начиная с версии 3.2, поэтому у меня есть доступ к таким вещам, как свойства shadow и shouldRasterize в CALayer.

1 Ответ

15 голосов
/ 03 июля 2010

Ключевым моментом, который необходимо знать о тенях CALayer, является то, что они по умолчанию визуализируются из составного альфа-канала слоя;это может быть очень медленно, особенно когда слой вращается или меняет размер.Вы должны заглянуть в свойство shadowPath: если вы дадите Core Animation простую фигуру, такую ​​как прямоугольник (UIBezierPath +bezierPathWithRect: со слоем bounds, то вы получите [через свойство CGPath] CGPathRef вы можете использовать его там), вы увидите гораздо лучшую производительность.

shouldRasterize также определенно полезен, особенно с представлениями, которые имеют много подпредставлений, которые меняются не часто;тем не менее, убедитесь, что вы установили для слоя rasterizationScale значение [UIScreen mainScreen].scale, иначе вы получите неприятную пикселизацию на экранах с высоким разрешением, таких как iPhone 4.

...