【发布时间】:2015-01-11 23:07:00
【问题描述】:
找不到填充关闭UIBezierPath 的解决方案,使用一些颜色和一些宽度,但保持路径线透明。
[[UIColor clearColor] setStroke] does not work.
我有什么:
我想要什么:
两个矩形的共享线具有相同的坐标,这就是为什么我在绘制它们时需要一些偏移。
【问题讨论】:
标签: objective-c uikit uibezierpath
找不到填充关闭UIBezierPath 的解决方案,使用一些颜色和一些宽度,但保持路径线透明。
[[UIColor clearColor] setStroke] does not work.
我有什么:
我想要什么:
两个矩形的共享线具有相同的坐标,这就是为什么我在绘制它们时需要一些偏移。
【问题讨论】:
标签: objective-c uikit uibezierpath
如果您要擦除路径粗轮廓内的所有内容,请使用CGContextReplacePathWithStrokedPath 将笔划转换为路径。然后用清晰的混合模式填充它,从而沿着粗路径擦除绘图。或者,只需描边路径,再次使用清晰的混合模式。
在这幅图中,粗黄色椭圆没有被描边或填充为黄色;椭圆是清晰的,黄色是通过红色矩形看到的后面的视图。换句话说,椭圆擦除红色矩形的椭圆形状。
这是绘制椭圆的代码:
CGContextAddEllipseInRect(con, CGRectMake(100,100,200,50))
CGContextSetLineWidth(con, 10)
CGContextSetBlendMode(con, kCGBlendModeClear)
CGContextReplacePathWithStrokedPath(con)
CGContextFillPath(con)
或者你可以这样做:
CGContextAddEllipseInRect(con, CGRectMake(100,100,200,50))
CGContextSetLineWidth(con, 10)
CGContextSetBlendMode(con, kCGBlendModeClear)
CGContextStrokePath(con)
【讨论】:
使用 [UIColor clearColor] 进行描边与将橡皮擦填满你已经完成的填充不同,它只是用一支透明墨水笔在上面绘图。
您可以使用 pathByStrokingPath 创建第二条路径,然后使用 EOClip 从填充中“遮盖”该区域,或者您可以使用后面的任何 backgroundColor 来描边您的路径...
【讨论】:
pathByStrokingPath 与CGContextReplacePathWithStrokedPath 完全相同,因此您给出的答案与我已经给出的相同。 CGContextSetBlendMode 到 kCGBlendModeClear 确实在现有填充上使用橡皮擦,如我的屏幕截图所示。无论哪种方式都很好。在我的书中,我说明了这两种方法(擦除与剪切):apeth.com/iOSBook/ch15.html#_paths_and_drawing(以及下一节,关于剪切)