Нарисовать тень с кварцем медленно на 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;
В то время как это создает красивую тень в моем приложении, она также откладывает ее до смерти, когда отображается представление... даже при запуске за пределами отладчика. Есть ли что-то, что я забываю, или этот метод просто не практичен для больших просмотров?
Для справки я разместил скриншот здесь.
Ответы
Ответ 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];