我正在尝试绘制一个有中风的 CGPath。
基本上我想用CGPath画一条线。然后我想返回并在最后一个 CGPath 的两侧画线,使其具有轮廓的效果。
这条线可以以任何方式弯曲和转动,但我总是需要外面的两条线跟随。
编辑:我需要能够使线的中间透明但轮廓纯黑色。
我正在尝试绘制一个有中风的 CGPath。
基本上我想用CGPath画一条线。然后我想返回并在最后一个 CGPath 的两侧画线,使其具有轮廓的效果。
这条线可以以任何方式弯曲和转动,但我总是需要外面的两条线跟随。
编辑:我需要能够使线的中间透明但轮廓纯黑色。
用于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);
}
最简单的解决方案就是将路径描边两次。首先以较大的笔划宽度使用黑色,然后再次使用具有稍小的笔划宽度的蓝色笔划相同的路径。
编辑:
如果我没记错的话,你可以用它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
要使用的斜接限制。