我对绘制UIBezierPath
的一半存有疑问。如何在不使用CAGradientLayer
的情况下用绿色填充左手部分(拇指左),用白色填充右手部分(拇指右)?
我用来创建贝塞尔曲线路径的代码-https://gist.github.com/robertmryan/67484c74297cede3926a3aed2fceedb9
我想要实现的屏幕截图:
答案 0 :(得分:0)
一种方法是将遮罩层添加到弯曲路径形状层。
当“拇指”位置改变时,更改遮罩的宽度以仅显示形状层的“左侧”。
创建一个形状图层用作遮罩:
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以显示透明度):
修改
评论后,目标是使轨道路径的“右侧”为白色而不是透明。
使用相同的方法,我们可以在原始形状图层的顶部添加一个白色形状图层,并对其进行遮罩以仅显示右侧。
以下是更新的要点-https://gist.github.com/DonMag/397dfbe4779e817531ef7a663365b2e7-显示以下结果: