iOS: CALayer тень только прямоугольная? - PullRequest
0 голосов
/ 25 марта 2011

Для свойств тени на CALayer, это только прямоугольный и только для слоя?То есть с кварцем я могу установить тень, выполняя заливку по произвольному пути.Могу ли я сделать это с теневыми свойствами CALayer?Я так не думаю, но мне нужно подтверждение.

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

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

[shadowDepth.layer setMasksToBounds:NO ];
[shadowDepth.layer setShadowColor:[[UIColor blackColor ] CGColor ] ];
[shadowDepth.layer setShadowOpacity:0.5 ];
[shadowDepth.layer setShadowRadius:6.0 ];
[shadowDepth.layer setShadowOffset:CGSizeMake( 0 , 0 ) ];
[shadowDepth.layer setShouldRasterize:YES ];
UIBezierPath * depthShadowPath = [UIBezierPath bezierPath ];
[depthShadowPath moveToPoint:CGPointMake( 40 , 140 ) ];
[depthShadowPath addLineToPoint:CGPointMake( shadowDepth.frame.size.width - 40 , 140 ) ];
[depthShadowPath addLineToPoint:CGPointMake( shadowDepth.frame.size.width + 20 , shadowDepth.frame.size.height + 40 ) ];
[depthShadowPath addLineToPoint:CGPointMake( -10 , shadowDepth.frame.size.height + 40 ) ];
[depthShadowPath addLineToPoint:CGPointMake( 40 , 140 ) ];
[shadowDepth.layer setShadowPath:[depthShadowPath CGPath ] ];

Я написал статью об этом вместе с некоторыми советами по оптимизации производительности вашего приложения. Проверьте это здесь: CALayer Shadows

1 голос
/ 25 марта 2011

Если вы ориентируетесь на iOS 3.2 или более позднюю версию, вы можете использовать любой желаемый путь, но люди часто пропускают его, потому что он в iOS, а не в OS X. Проверьте свойство shadowPath , котороеВы устанавливаете конкретный путь для каждого отдельного слоя.

Также, если вы собираетесь использовать тени, определенно неплохо включить shouldRasterize , если это возможно;это имеет огромное значение для производительности.

...