Ваш код намного сложнее, чем нужно. Одна большая проблема заключается в том, что вы продолжаете добавлять все больше и больше слоев каждый раз, когда вызывается draw
.
Нет необходимости использовать слои для рисования точек в вашем пользовательском представлении. Вот гораздо более простое решение:
class DrawTrace: UIView
{
var points = [CGPoint]() {
didSet {
setNeedsDisplay()
}
}
override func draw(_ rect: CGRect)
{
let size = CGSize(width: 2, height: 2)
UIColor.black.set()
for point in points {
let dot = UIBezierPath(ovalIn: CGRect(origin: point, size: size))
// this just draws the circle by filling it.
// Update any properties of the path as needed.
// Use dot.stroke() if you need an outline around the circle.
dot.fill()
}
}
}
let trace = DrawTrace(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
trace.backgroundColor = .white
trace.points = [ CGPoint(x: 10, y: 10), CGPoint(x: 35, y: 100)]
Выше можно скопировать на игровую площадку.