Как не обводить () каждый UIBezierPath в массиве
Я работаю над приложением для рукописного ввода и использую три разные переменные UIBezierPath:
- [пути] - массив UIBezierPath
- временный путь - помочь с сглаживанием
- realPath - путь, который в конечном итоге будет добавлен в массив 'paths'
Я использую массив путей, а не один путь, потому что у меня есть инструмент панорамирования для перемещения линий по экрану - поэтому они должны быть отдельными объектами. Проблема в том, что мне нужно перерисовывать весь массив каждый раз, когда вызывается draw(:_):
override func draw(_ rect: CGRect) {
strokeColor.setStroke()
for path in paths{
path.stroke()
}
realPath?.stroke()
temporaryPath?.stroke()
}
Это создает проблемы с производительностью после рисования около 20 путей. Есть ли решение, чтобы не перерисовывать весь массив каждый раз, когда вызывается draw(:_)?
1 ответ
Я выяснил, что, передавая только прямоугольник пути, который я рисую, в setNeedsDisplay(), в сочетании с условием, которое рисует линии в массиве только тогда, когда touchesEnded(_:), является хорошим решением. Однако другие приложения с аналогичной функциональностью, очевидно, этого не делают, поэтому я предполагаю, что есть лучшее решение.
override func draw(_ rect: CGRect) {
strokeColor.setStroke()
realPath?.stroke()
if yesnewline == true{
for path in paths{
path.stroke()
}
yesnewline=false
}
temporaryPath?.stroke()
}