Как не обводить () каждый 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()

}
Другие вопросы по тегам