Подтвердить что ты не робот

Нарисовать тень с кварцем медленно на iPhone и iPad. Другой путь?

Я был очень взволнован, когда узнал, насколько легко добавлять тени к моим 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;

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

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

4b9b3361

Ответ 1

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

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

self.contentView.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.contentView.bounds].CGPath;

Ответ 2

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

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

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