Рисование тени с помощью Quartz идет медленно на iPhone и iPad.По-другому? - PullRequest
18 голосов
/ 09 сентября 2010

Я был очень взволнован, когда узнал, насколько просто добавить тени в мои UIViews на iPhone / iPad.

Просто добавьте фреймворк в Xcode, добавьте импорт в начало файла:

#import <QuartzCore/QuartzCore.h>

Затем позже:

self.contentView.layer.shadowRadius = 3.0;
self.contentView.layer.shadowOffset = CGSizeMake(-2.0, -3.0);
self.contentView.layer.shadowOpacity = 0.5;
self.contentView.layer.shadowColor = [UIColor blackColor].CGColor;

Хотя это создает красивую тень в моем приложении, оно также откладывает его до смерти сейчас, когда вид отображается ... даже когдазапущен вне отладчика.Есть ли что-то, что я забыл, или этот метод просто не практичен для больших представлений?

Для справки я выложил скриншот здесь .

Ответы [ 2 ]

53 голосов
/ 09 сентября 2010

Вам следует установить свойство shadowPath .Именно так CoreGraphics может оптимизировать тени.

Например, если ваш вид представляет собой непрозрачный прямоугольник:

self.contentView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.contentView.bounds].CGPath;
6 голосов
/ 22 февраля 2013

Я подумал, что должен ответить, потому что я не хотел, чтобы этот камень был похоронен в комментариях.

В дополнение к приведенному выше ответу Коббала, который очень помог, occulus также упомянул следующую оптимизацию для непрямоугольных теней, таких как тени текста.

self.contentView.layer.shouldRasterize = YES;
// Fix visual degradation when rasterizing on high-density screens:
self.contentView.layer.rasterizationScale = [[UIScreen mainScreen] scale];
...