【问题标题】:fill UIBezierPath but keep path clear填充 UIBezierPath 但保持路径清晰
【发布时间】:2015-01-11 23:07:00
【问题描述】:

找不到填充关闭UIBezierPath 的解决方案,使用一些颜色和一些宽度,但保持路径线透明。

[[UIColor clearColor] setStroke] does not work.

我有什么:

我想要什么:

两个矩形的共享线具有相同的坐标,这就是为什么我在绘制它们时需要一些偏移。

【问题讨论】:

    标签: objective-c uikit uibezierpath


    【解决方案1】:

    如果您要擦除路径粗轮廓内的所有内容,请使用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)
    

    【讨论】:

    • 当我只写[路径填充]时,整个矩形被填充,包括路径。即使我写 [clearColor setStroke] 和 [path stroke] 整个矩形仍然被填充。
    • 但这听起来像您要求做的事情:“填充封闭路径但保持路径清晰”。你能画出你想要完成的事情吗?
    • 现在我使用了 [whiteColor setFill],但由于很多原因,这是一个不好的解决方案。
    • 我不应该只画矩形,这就是我使用贝塞尔路径的原因。
    • 我建议您按照我在回答中的建议进行操作 - 使用 CGContextReplacePathWithStrokedPath 来获取勾勒描边原始路径的路径 - 然后使用 Clear 混合模式绘制该路径,从而擦除绘图的那部分。
    【解决方案2】:

    使用 [UIColor clearColor] 进行描边与将橡皮擦填满你已经完成的填充不同,它只是用一支透明墨水笔在上面绘图。

    您可以使用 pathByStrokingPath 创建第二条路径,然后使用 EOClip 从填充中“遮盖”该区域,或者您可以使用后面的任何 backgroundColor 来描边您的路径...

    【讨论】:

    • 这也是个好主意。请注意pathByStrokingPathCGContextReplacePathWithStrokedPath 完全相同,因此您给出的答案与我已经给出的相同。 CGContextSetBlendModekCGBlendModeClear 确实在现有填充上使用橡皮擦,如我的屏幕截图所示。无论哪种方式都很好。在我的书中,我说明了这两种方法(擦除与剪切):apeth.com/iOSBook/ch15.html#_paths_and_drawing(以及下一节,关于剪切)
    • 对不起,我是在 iPhone 上做的,在我输入时看不到那些 cmets(或者实际上是另一个答案)。最好的 + 赞成票
    • 别担心,你的回答也很好。我只是为 OP 澄清一下。 - 有一个 iPhone 界面到 SO????
    • 我喜欢这种情况。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多