iphone - производительность анимации очень низкая при включенной тени просмотра - PullRequest
15 голосов
/ 13 октября 2011

У меня UILabel с CALayer тенью. И я просто перемещаю его с помощью UIView анимации.

Производительность плохая, и я вижу, что анимация вообще не плавная.

Я думаю, что именно тень UILabel вызывает проблемы с анимацией, потому что если я выключу тень, анимация станет такой же плавной, как обычно.

Я пытался использовать view.layer.shouldRasterize = YES;

Но анимация все еще есть.

Кто-нибудь может дать мне несколько советов?

Спасибо

Ответы [ 2 ]

40 голосов
/ 13 октября 2011

Вы можете значительно улучшить производительность тени CALayer, используя его свойство shadowPath - это позволяет рисовать тень без необходимости пересчитывать альфа-маску слоя.Для прямоугольного вида вы должны использовать его так:

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

или, если его углы закруглены,

theView.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:theView.bounds cornerRadius:theView.layer.cornerRadius].CGPath;

Обратите внимание, что это тень вокруг границ вида -если вы хотите повысить производительность тени самого текста, вам нужно либо использовать свойства текста-тени метки (которые жертвуют тонкостями теней CALayer, например размытие для лучшей скорости рендеринга), либо - гораздо более сложный вариант - создатьCGPathRef для использования в качестве слоя shadowPath из самих текстовых глифов.

0 голосов
/ 13 октября 2011

Не уверен, что это ответ, который вы ищете, но я нашел это: Тень на тексте UITextField

Может быть, производительность выше, я не пробовал, нокажется, что будет.

...