如何在iOS中的众多CALayers中有效地绘制阴影?

时间:2012-09-28 23:41:56

标签: ios core-graphics calayer

我有一些纸牌游戏,使用CALayers绘制个人卡片。屏幕上很容易有40或50个,通常可以正常工作。

我最近尝试使用CALayers的简单属性打开它们的阴影:

theCardLayer.shadowOffset = CGSizeMake(3,2);
theCardLayer.shadowOpacity = 0.7f;

那时,程序开始变得非常迟钝。很公平;一些文档说阴影可能是CPU密集型的。

有关如何有效地在所有内容上绘制阴影的任何想法?它们都在同一个UIView中的同一个CALayer上,所以我想知道是否有一种方法来拉动图层的掩模或它的UIView和阴影,或者其他......

iOS5以下的任何功能都是合理的游戏。

2 个答案:

答案 0 :(得分:3)

至少,请尝试设置图层的shadowPath属性。它可以使阴影渲染速度明显加快。

答案 1 :(得分:0)

Kurt提供了正确的解决方案。以下是如何使用shadowPath的示例:

UIBezierPath *thisCLPath = [UIBezierPath 
                            bezierPathWithRoundedRect:theCardLayer.bounds 
                            cornerRadius:10.0f];
theCardLayer.shadowPath = thisCLPath.CGPath;

显然,我在这里使用圆角。对于直边图层,您只需使用bezierPathWithRect:即可。 UIBezierPath中还有一些其他有用的方法。

结果只是老款iOS设备(如iPhone4或中型iPod Touch)的延迟,而且在iPad3上熠熠生辉。