Подскажите может кто делал подобное…
Есть массив точек, по точкам с помощью UIGraphicsGetCurrentContext рисую путь.
Также реализовано рисование касанием.
Вопрос можно ли как то сравнить что рисуемый путь пальцем равен нарисованному по точкам?
П.С. так же можно нарисовать с помощью UIBezierPath, но есть ли смысл
условно красная линия задана, рисую черной сверху
код ниже
class Canvas: UIView {
// массив точек
var lines: [[[Double]]]?
private var newLines: [[CGPoint]] = []
override func draw(_ rect: CGRect) {
super.draw(rect)
guard let context = UIGraphicsGetCurrentContext() else { return }
context.setLineCap(.round)
context.setLineWidth(30)
context.setFillColor(UIColor.black.cgColor)
// рисование по точках касания
newLines.forEach { (line) in
for (i, p) in line.enumerated() {
if i == 0 {
context.move(to: p)
} else {
context.addLine(to: p)
}
}
}
context.strokePath()
// рисование по заданным точкам
guard let lines = lines else { return }
context.setStrokeColor(UIColor.black
context.setLineWidth(10)
lines.forEach { (line) in
for (i, p) in line.enumerated() {
if i == 0 {
let x = CGFloat(p.first!) * self.frame.width
let y = CGFloat(p.last!) * self.frame.height
let point = CGPoint(x: x, y: y)
context.move(to: point)
} else {
let x = CGFloat(p.first!) * self.frame.width
let y = CGFloat(p.last!) * self.frame.height
let point = CGPoint(x: x, y: y)
context.addLine(to: point)
}
}
}
context.strokePath()
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
newLines.append([CGPoint]())
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
//определение точек касания
guard let point = touches.first?.location(in: self),
var lastLine = newLines.popLast() else { return }
lastLine.append(point)
newLines.append(lastLine)
setNeedsDisplay()
}
}