Как применить цветной фильтр к представлению - PullRequest
0 голосов
/ 13 апреля 2020

Я пытался обернуть голову вокруг фильтров и слоев Core Image, но я не смог найти решения для того, чего я пытаюсь достичь.

Так что я создаю приложение, которое имеет компонент, в котором пользователю необходимо рисовать поверх произвольных фигур (здесь для простоты форма представляет собой круг). Когда пользователь переходит край формы, цвет обводки должен измениться с желтого на красный.

то, что я пытаюсь получить

И это то, что я до сих пор:

что у меня есть

Вот как я устанавливаю «маску»:

@IBOutlet private weak var tempImageView: UIImageView! {
    willSet {
        let maskImage: UIImage = UIImage(named: "circle2")!
        let mask = CALayer()
        mask.opacity = 0.8
        mask.contents = maskImage.cgImage
        mask.contentsGravity = CALayerContentsGravity.resizeAspect
        mask.bounds = CGRect(x: 0,
                             y: 0,
                             width: newValue.frame.width,
                             height: newValue.frame.height)
        mask.anchorPoint = CGPoint(x: 0, y: 0)
        mask.position = CGPoint(x: 0, y: 0)
        newValue.layer.addSublayer(mask)
    }
}

и вот где я рисую рисунок :

func drawLine(from fromPoint: CGPoint, to toPoint: CGPoint) {
    UIGraphicsBeginImageContext(view.frame.size)
    guard let context = UIGraphicsGetCurrentContext() else {
        return
    }
    tempImageView.image?.draw(in: view.bounds)


    context.setLineCap(.round)
    context.setBlendMode(.normal)
    context.setLineWidth(brushWidth)

    context.move(to: fromPoint)

    context.setStrokeColor(UIColor.red.cgColor)
    context.addLine(to: toPoint)
    context.strokePath()

    tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
    tempImageView.alpha = 1.0

    UIGraphicsEndImageContext()
}

Однако все, что он делает, это выцветает красный цвет внутри фигуры вместо того, чтобы придавать ему другой цвет, чего я не смог понять, как это сделать.

...