Один из подходов - добавить слой маски к слою с изогнутой траекторией.
Когда изменяется положение «большого пальца», измените ширину маски, чтобы отображалась только «левая сторона»Слой формы.
Создайте слой формы для использования в качестве маски:
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 позади, чтобы показать прозрачность):
Редактировать
После комментариев цель состоит в том, чтобы "правая сторона" траектории была белой, а не прозрачной.
Используя тот же подход, мы можем добавить слой white shape поверх исходного слоя shape и замаскировать его так, чтобы отображать толькоправая сторона.
Вот обновленная суть - https://gist.github.com/DonMag/397dfbe4779e817531ef7a663365b2e7 - показывающая этот результат: