I'm working on an app that makes points and lines, the problem happens when i open a new view because the main view keeps drawing the touches of the new view.
Here is my code. Most of the code is just to know in which quadrant the point is drawn to create a UILabel, also to know if a point is gonna be drawn near another and those things.
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
print(i)
let location = touch.location(in: imageView)
xpoints.append(location.x)
ypoints.append(location.y)
print(xpoints[i], ", ", ypoints[i])
if i == 0{
lastPoint = location
p = true
drawLine(from: lastPoint, to: lastPoint)
xpoint = Int(xpoints[i])
ypoint = Int(ypoints[i])
if xpoint <= 207 && ypoint <= 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]-40, y: ypoints[i]-40, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint > 207 && ypoint <= 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]+10, y: ypoints[i]-40, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint <= 207 && ypoint > 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]-40, y: ypoints[i]+10, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint > 207 && ypoint > 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]+10, y: ypoints[i]+10, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
}
} else{
for j in 0..<i {
if xpoints[i] >= (xpoints[j]-20) && xpoints[i] <= (xpoints[j]+20) && ypoints[i] >= (ypoints[j]-20) && ypoints[i] <= (ypoints[j]+20){
xpoints[i] = xpoints[j]
ypoints[i] = ypoints[j]
repeated = true
}
}
if repeated{
newlocation.x = xpoints[i]
newlocation.y = ypoints[i]
currentPoint = newlocation
p = true
drawLine(from: currentPoint, to: currentPoint)
l = true
drawLine(from: lastPoint, to: currentPoint)
lastPoint = currentPoint
repeated = false
} else{
currentPoint = location
p = true
drawLine(from: currentPoint, to: currentPoint)
xpoint = Int(xpoints[i])
ypoint = Int(ypoints[i])
if xpoint <= 207 && ypoint <= 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]-40, y: ypoints[i]-40, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint > 207 && ypoint <= 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]+10, y: ypoints[i]-40, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint <= 207 && ypoint > 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]-40, y: ypoints[i]+10, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
} else if xpoint > 207 && ypoint > 448{
let labelView = UILabel(frame: CGRect(x: xpoints[i]+10, y: ypoints[i]+10, width: 50, height: 25))
labelView.numberOfLines = 2
labelView.font = labelView.font.withSize(10)
labelView.text = "X: \(xpoint)\nY: \(ypoint)"
self.view.addSubview(labelView)
}
l = true
drawLine(from: lastPoint, to: currentPoint)
lastPoint = currentPoint
}
}
p = false
l = false
i += 1
}
}
func drawLine(from lastPoint: CGPoint, to toPoint: CGPoint){
UIGraphicsBeginImageContext(view.frame.size)
guard let context = UIGraphicsGetCurrentContext()
else{
return
}
imageView.image?.draw(in: view.bounds)
context.move(to: lastPoint)
context.addLine(to: toPoint)
context.setLineCap(.round)
context.setBlendMode(.normal)
if p {
context.setLineWidth(20)
context.setStrokeColor(UIColor.black.cgColor)
}
if l {
context.setLineWidth(3)
context.setStrokeColor(UIColor.systemBlue.cgColor)
}
context.strokePath()
imageView.image = UIGraphicsGetImageFromCurrentImageContext()
imageView.alpha = 1
UIGraphicsEndImageContext()
}