Как не обводить() каждый UIBezierPath в массиве

Я работаю над приложением для рукописного ввода и использую три разные переменные UIBezierPath:

  • [paths] - массив UIBezierPath
  • временный путь - чтобы помочь со сглаживанием
  • realPath — путь, который в конечном итоге будет добавлен в массив «пути».

Я использую массив путей, а не один путь, потому что у меня есть инструмент панорамирования для перемещения линий по экрану, поэтому они должны быть отдельными объектами. Проблема в том, что мне приходится перерисовывать весь массив каждый раз, когда вызывается draw(:_):

override func draw(_ rect: CGRect) {
    strokeColor.setStroke()

    for path in paths{
        path.stroke()
    }

    realPath?.stroke()
    temporaryPath?.stroke()
}

Это создает проблемы с производительностью после рисования около 20 путей. Есть ли решение не перерисовывать весь массив каждый раз, когда вызывается draw(:_)?


person Community    schedule 06.04.2017    source источник


Ответы (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()

}
person Community    schedule 07.04.2017