CAShapeLayer使用CGPathRef来绘制它的东西.所以我有一条星路,我想要一个半径约为15个单位的平滑投影.可能在一些新的iPhone OS版本中有一些不错的功能,但我需要自己做一个旧版本的3.0(大多数人仍然使用).
我试图做一些非常令人讨厌的事情:我创建了一个for循环并按顺序创建了15个这样的路径,逐步变换缩放它们变得更大.然后将它们分配给新创建的CAShapeLayer,并在每次迭代时稍微降低它的alpha值.不仅这个缩放在数学上是不正确的并且很糟糕(它应该相对于轮廓发生!),阴影不是圆形的并且看起来非常难看.这就是为什么柔和的阴影具有半径.
在15个单位的阴影大小之后,恒星的尖端不应该显得非常尖锐.它们应该像奶油一样柔软.但是在我丑陋的解决方案中,它们就像恒星本身一样竖琴,因为我所做的只是将恒星缩放15次并将其降低15次.丑陋.
我想知道大家伙是怎么做到的?如果你有一个任意路径,并且该路径必须抛出阴影,那么算法如何工作呢?可能必须将路径扩展30次,相对于远离填充部分的轮廓的切线逐点扩展,并且仅需0.5个单位即可进行良好的混合.
在我重新发明轮子之前,也许有人有一个方便的例子或链接?
阴影是模糊和偏移的对象形状的半透明灰度蒙版。
CGContextSetShadowWithColor这就是CGContextSetShadow在 iPhone 上实现的方法。您设置阴影然后绘制一些东西,并且也会应用阴影。
CAShapeLayer 没有一个简单的选项来应用阴影。在绘制形状之前,您必须创建自定义视图或图层并设置阴影。
我没有尝试过,但以下方法可能有效:
@interface ShadowShapeLayer : CAShapeLayer
@end
@implementation ShadowShapeLayer
-(void) drawInContext:(CGContextRef)context {
CGContextSaveGState( context );
CGContextSetShadow( context , CGSizeMake( 5 , 5 ) , 15 );
[super drawInContext:context];
CGContextRestoreGState( context );
}
@end
Run Code Online (Sandbox Code Playgroud)
编辑:谢谢守财奴。
| 归档时间: |
|
| 查看次数: |
1266 次 |
| 最近记录: |