我有一个关于绘制UIBezierPath一半的问题。如何在不使用CAGradientLayer的情况下用绿色填充左半部分(拇指左),用白色填充右半部分(拇指右)?

我用来创建Bezier路径的代码-https://gist.github.com/robertmryan/67484c74297cede3926a3aed2fceedb9

我要实现的屏幕截图:

swift - iOS在不使用CAGradientLayer的情况下用其他颜色填充UIBezierPath的一半-LMLPHP

最佳答案

一种方法是将遮罩层添加到弯曲路径形状层。

当“拇指”位置改变时,更改遮罩的宽度以仅显示形状层的“左侧”。

创建一个形状图层用作遮罩:

let maskLayer: CALayer = {
    let layer = CALayer()
    layer.backgroundColor = UIColor.black.cgColor
    return layer
}()


viewDidLoad()中,将该层设置为弯曲形状层的蒙版:

pathLayer.mask = maskLayer


只要设置了“拇指”位置,就更新遮罩的宽度:

func updateMask(at point: CGPoint) -> Void {
    var f = view.bounds
    f.size.width = point.x
    CATransaction.begin()
    CATransaction.setDisableActions(true)
    maskLayer.frame = f
    CATransaction.commit()
}


我在以下位置发布了您要点的修改版本:https://gist.github.com/DonMag/a2154e70a3c67193a7b19bee41c8fe95

确实只有几处更改...查找以// DonMag -开头的注释

这是结果(后面带有imageView以显示透明度):

swift - iOS在不使用CAGradientLayer的情况下用其他颜色填充UIBezierPath的一半-LMLPHP



编辑

评论后,目标是使轨道路径的“右侧”为白色而不是透明。

使用相同的方法,我们可以在原始形状图层的顶部添加一个白色形状图层,并对其进行遮罩以仅显示右侧。

这是更新的要点-https://gist.github.com/DonMag/397dfbe4779e817531ef7a663365b2e7-显示此结果:

swift - iOS在不使用CAGradientLayer的情况下用其他颜色填充UIBezierPath的一半-LMLPHP

10-08 14:14