CGPath大纲
我正在绘制一个CGPath,因为它的笔画是中风的。
基本上我想要一个使用CGPath绘制一条线。 然后我想回到最后一个CGPath的两边画线,使其成为轮廓线。
这条线可以弯曲和转弯,但我总是需要外面的两条线来跟随。
编辑:我需要能够使中间的行透明,但轮廓坚实的黑色。
使用CGPathCreateCopyByStrokingPath
通过以某种宽度抚摸旧path来创build新path。 然后使用kCGPathFillStroke
绘制新的path。
- (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); }
最简单的解决办法就是两次冲击path。 首先用较大的笔划宽度的黑色,然后再用相同的path使用笔划宽度略小的蓝色笔划。
编辑:
如果我没有记错的话,可以使用CGPathCreateCopyByStrokingPath(...)
来创build一个新的path,然后你可以进行描边和填充。 那么你可以使用半透明的颜色。
从文档:
CGPathCreateCopyByStrokingPath
创build另一个path的描边副本。
CGPathRef CGPathCreateCopyByStrokingPath( CGPathRef path, const CGAffineTransform *transform, CGFloat lineWidth, CGLineCap lineCap, CGLineJoin lineJoin, CGFloat miterLimit );
参数
path复制的path。
转变
指向仿射转换matrix的指针,如果不需要转换,则为NULL。 如果指定,则Quartz在将转换path添加到新path之前将转换应用到转换path的元素。
行宽
在用户空间单位中使用的线宽。 该值必须大于0。
的linecap
线头样式constant-kCGLineCapButt(默认),kCGLineCapRound或kCGLineCapSquare。 请参阅“CGLineCap”。
lineJoin
行连接值-kCGLineJoinMiter(默认值),kCGLineJoinRound或kCGLineJoinBevel。 见“CGLineJoin”。
miterLimit分别
使用的斜接限制。