CGPath与大纲

end*_*ndy 8 core-graphics objective-c quartz-graphics cgpath ios

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

基本上我想用CGPath绘制一条线.然后我想回去在最后一个CGPath的两边绘制线条,使其具有轮廓效果.

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

路径

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

Rob*_*ier 14

用于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);
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*ist 5

最简单的解决方案就是两次敲击路径.首先使用较大笔划宽度的黑色,然后使用略微较小的笔划宽度的蓝色再次笔划相同的路径.

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

从文档:

CGPathCreateCopyByStrokingPath

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

CGPathRef CGPathCreateCopyByStrokingPath(
                                         CGPathRef path,
                                         const CGAffineTransform *transform,
                                         CGFloat lineWidth,
                                         CGLineCap lineCap,
                                         CGLineJoin lineJoin,
                                         CGFloat miterLimit 
                                         ); 
Run Code Online (Sandbox Code Playgroud)

参数
path
The path to copy.

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

lineWidth
The line width to use, in user space units. The value must be greater than 0.

lineCap
线帽样式常量-kCGLineCapButt(默认值),kCGLineCapRound或kCGLineCapSquare.请参阅"CGLineCap".

lineJoin
A line join value—kCGLineJoinMiter (the default), kCGLineJoinRound, or kCGLineJoinBevel. See “CGLineJoin”.

miterLimit
要使用的斜接限制.