在 UIBezierPath 被切断的地方画一条线

Drawing a line where the UIBezierPath gets cut off

我正在尝试为图像编辑应用创建色调曲线。我已经使用 UIBezierPath 创建了曲线本身,但是,当曲线超出视图的边界时,它会被切断。

其他应用程序通过在曲线被切断的地方画一条线来解决这个问题。 你知道如何实现这一目标吗?一种可能的方法是检测曲线在边界外的位置并在那里画一条线,但我找不到这样做的方法。

确实没有简单的方法可以做到这一点。我能想到的两个选项:

  1. 找出曲线偏离视图边缘的位置,并在缺失区域绘制线段。这将需要您自己评估每条曲线上的一堆点——“三次贝塞尔曲线”部分 here 有相应的公式——并存储曲线 Y 值消失的 X 位置列表视图的顶部以及它再次返回的位置。从那里,您可以使用该列表为视图外的位绘制一系列线段。
  2. 制作第二个版本的曲线,通过它的角在视图底部下方循环,将其分配给具有填充颜色集的形状层,并用薄层(高度等于到你的线条粗细)运行 沿着视图的顶部。这不一定看起来和其他方法一样好,因为细线层的末端会与曲线的一些部分重叠,但它的数学工作要少得多。下图中,左边是原来的路径;在那之后是在视图的右下角添加了一个附加点的路径,之后您将关闭路径(使用 -closePath);将其分配给 CAShapeLayer 并设置其填充颜色(蓝色),然后将该层设置为位于视图顶部(绿色)的薄矩形层的蒙版,为您提供一个在曲线穿过顶部的任何地方都可见的层你的看法。