在UIBezierPath的两侧应用阴影

5

我目前正在屏幕上绘图。我可以得到平滑的线条并且可以更改绘图的颜色。但是我找不到如何为这条线条应用阴影。

为了绘制它,我使用:

[path strokeWithBlendMode:[path blendMode] alpha:1.0];

我看到可以使用CGContextSetShadowWithColor(),但是我不确定如何使用它,因为在strokeWithBlendMode的CGPath参考文献中说:

此方法在绘制之前自动保存当前图形状态,并在完成后恢复该状态,因此您无需自己保存图形状态。

所以我真的不知道在哪里放置CGContextSetShadowWithColor()或者其他任何东西是否可以使用它。
问候
1个回答

3
如果您想使用CGContextSetShadowwithColor(),那么您需要改变绘制贝塞尔路径的方式,以便将CGPath表示绘制到CGContext中。下面是一个例子:
UIBezierPath *path;     // this is your path as before
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextAddPath(context, path.CGPath);
CGContextSetLineWidth(context, 2.0);
CGContextSetBlendMode(context, path.blendMode);
CGContextSetShadowWithColor(context, CGSizeMake(1.0, 1.0), 2.0, [UIColor blackColor].CGColor);
CGContextStrokePath(context);

另一种方法是创建一个新的CAShapeLayer并将路径绘制到该图层上,通过将其设置为路径属性。这样可以轻松地添加一个只会对路径产生阴影的阴影效果。


谢谢,我会尝试的! - Snaker
它可以工作,但只在线的一侧。我想要在两侧应用模糊效果来使整条线都模糊。 - Snaker
1
将shadowOffset设置为CGSizeZero,并调整模糊值,直到找到您喜欢的效果。 - ade177
使用这个方法可以工作。但是在 iPhone 6s 上变得非常卡顿。我将所有内容都设置在 drawRect 中了。有什么想法吗? - DanielZanchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接