【问题标题】:Clip Drawing to Opaque (Stroke) Part of CAShapeLayer将绘图剪辑到 CAShapeLayer 的不透明(描边)部分
【发布时间】:2017-01-04 14:18:38
【问题描述】:

我有一个CAShapeLayer,笔触不透明,填充透明。然后我想打电话给myContext.drawRadialGradient,但是将这个径向渐变剪辑到我的形状层的笔划上。目前,我调用的是myShapeLayer.path.addClip(),它将径向渐变剪辑到形状图层的填充区域,而不是描边。

换句话说,我想使用只是图层的不透明部分只是描边(在我的情况下也是如此),然后使用它剪辑当前上下文。我一直在搜索 CoreGraphics 文档,但无济于事。

【问题讨论】:

    标签: ios swift core-graphics quartz-core


    【解决方案1】:

    找到我的答案。您可以创建一个新的 UIBezierPath,它是您现有路径的副本,带有笔划,如下所示:

    let strokePath = UIBezierPath(cgPath: oldPath.cgPath.copy(
        strokingWithWidth: ..., lineCap: ..., lineJoin: ..., miterLimit: ...))
    strokePath.addClip()
    

    【讨论】:

      【解决方案2】:

      如果将形状图层添加为渐变图层的蒙版会怎样?这应该可行,因为这是遮罩层应该做的。

      如果这不起作用,您可能需要将形状图层捕获到图像并将其安装为渐变图层的蒙版。

      【讨论】:

      • 是的,如果它是一个渐变层就可以了。不幸的是CAGradientLayer只支持线性渐变,而且我需要一个径向渐变,所以我需要使用context.drawRadialGradient,它似乎并没有以同样的方式使用蒙版。
      【解决方案3】:

      将描边路径转换为填充区域与原始描边相同的新路径。现在您有一个可填充区域,您可以将其用作剪切区域。执行此操作的 CGContext 方法是调用 replacePathWithStrokedPath。正如文档明确所说:

      例如,您可以通过调用此函数然后调用函数clip() 来剪辑到路径的描边版本。

      【讨论】:

        猜你喜欢
        • 2011-03-14
        • 2023-04-03
        • 2011-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        相关资源
        最近更新 更多