9

我正在尝试绘制一个有中风的 CGPath。

基本上我想用CGPath画一条线。然后我想返回并在最后一个 CGPath 的两侧画线,使其具有轮廓的效果。

这条线可以以任何方式弯曲和转动,但我总是需要外面的两条线跟随。

小路

编辑:我需要能够使线的中间透明但轮廓纯黑色。

4

2 回答 2

15

用于CGPathCreateCopyByStrokingPath通过以一定宽度抚摸旧路径来创建新路径。然后使用kCGPathFillStroke.

- (void)drawRect:(CGRect)rect {
  CGContextRef context = UIGraphicsGetCurrentContext();

  CGMutablePathRef path = CGPathCreateMutable();
  CGPathMoveToPoint(path, NULL, 50, 50);
  CGPathAddLineToPoint(path, NULL, 200, 200);

  CGPathRef thickPath = CGPathCreateCopyByStrokingPath(path, NULL, 10, kCGLineCapButt, kCGLineJoinBevel, 0);
  CGContextAddPath(context, thickPath);

  CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
  CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
  CGContextSetLineWidth(context, 3);
  CGContextDrawPath(context, kCGPathFillStroke);

  CGPathRelease(thickPath);
  CGPathRelease(path);
}
于 2013-01-16T21:37:58.753 回答
5

最简单的解决方案就是将路径描边两次。首先以较大的笔划宽度使用黑色,然后再次使用具有稍小的笔划宽度的蓝色笔划相同的路径。

编辑:
如果我没记错的话,你可以用它CGPathCreateCopyByStrokingPath(...)来创建一个新的路径,然后你可以描边和填充。然后你可以使用半透明的颜色。

从文档中:

CGPathCreateCopyByStrokingPath

创建另一个路径的描边副本。

CGPathRef CGPathCreateCopyByStrokingPath(
                                         CGPathRef path,
                                         const CGAffineTransform *transform,
                                         CGFloat lineWidth,
                                         CGLineCap lineCap,
                                         CGLineJoin lineJoin,
                                         CGFloat miterLimit 
                                         ); 

参数
path
要复制的路径。

transform
指向仿射变换矩阵的指针,如果不需要变换,则为 NULL。如果指定,Quartz 在将转换路径的元素添加到新路径之前应用转换。

lineWidth
要使用的线宽,以用户空间为单位。该值必须大于 0。

lineCap
线帽样式常量——kCGLineCapButt(默认)、kCGLineCapRound 或 kCGLineCapSquare。参见“CGLineCap”。

lineJoin
线连接值——kCGLineJoinMiter(默认)、kCGLineJoinRound 或 kCGLineJoinBevel。请参阅“CGLineJoin”。

miterLimit
要使用的斜接限制。

于 2013-01-16T21:24:11.917 回答