Я пытался обернуть голову вокруг фильтров и слоев 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()
}
Однако все, что он делает, это выцветает красный цвет внутри фигуры вместо того, чтобы придавать ему другой цвет, чего я не смог понять, как это сделать.