iOS Заполните половину UIBezierPath другим цветом без CAGradientLayer - PullRequest
0 голосов
/ 30 октября 2019

У меня есть вопрос о рисовании половины UIBezierPath. Как мне заполнить левую часть (слева от большого пальца) зеленым цветом, а правую часть (справа от большого пальца) белым цветом без использования CAGradientLayer?

кода, который я использовал для создания пути Безье - https://gist.github.com/robertmryan/67484c74297cede3926a3aed2fceedb9

Скриншот того, чего я хочу достичь:

enter image description here

1 Ответ

0 голосов
/ 30 октября 2019

Один из подходов - добавить слой маски к слою с изогнутой траекторией.

Когда изменяется положение «большого пальца», измените ширину маски, чтобы отображалась только «левая сторона»Слой формы.

Создайте слой формы для использования в качестве маски:

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 позади, чтобы показать прозрачность):

enter image description here


Редактировать

После комментариев цель состоит в том, чтобы "правая сторона" траектории была белой, а не прозрачной.

Используя тот же подход, мы можем добавить слой white shape поверх исходного слоя shape и замаскировать его так, чтобы отображать толькоправая сторона.

Вот обновленная суть - https://gist.github.com/DonMag/397dfbe4779e817531ef7a663365b2e7 - показывающая этот результат:

enter image description here

...