Я рисую графики на NSView, используя стандартные API рисования какао. См. Изображение ниже. В NSView есть несколько графиков, которые находятся в scrollView. Каждый график имеет около 1440 точек данных, а прокрутка производительности немного борется из-за перерисовки, которая выполняется.Как оптимизировать рисование какао, чтобы обеспечить плавную прокрутку
Есть ли способ обеспечить, чтобы графика была нарисована только один раз, чтобы изображение можно было прокручивать вверх и вниз плавно?
Этот же вид используется для создания выходного файла PDF.
Учитывая, что чертеж действительно не нужно изменять, если размер не изменяется, и этого не происходит, есть ли способ предотвратить перерисовку представления во время прокрутки. Надеюсь, есть простой переключатель, чтобы убедиться, что просмотр рисуется один раз и сохраняет это в памяти !?
Базовый код находится в функции Draw() подкласса NSView.
override func draw(_ dirtyRect: NSRect) {
drawAxis()
// Only draw the graph axis during live resize
if self.inLiveResize {
return
}
plot1()
plot2()
plot3()
...
}
func plot1(){
for value in plot1Data {
path = NSBezierPath()
if isFirst {
path?.move(to: value)
} else {
path?.line(to: value)
}
}
}
Хорошие предложения. Вы также можете изучить методы 'bitmapImageRepForCachingDisplayInRect:' и 'cacheDisplayInRect: toBitmapImageRep:'. Наверное, нет необходимости в этом конкретном случае, но кто знает. – bhaller
Спасибо, было бы ли смысл создавать все «NSBezierPaths» только один раз, т.е. хранить их в массиве, а затем перебирать по этому массиву, чтобы проверить, пересекается ли каждый путь с грязными прямоугольниками (s), и если это так, чтобы вызвать пути Метод «stroke()»? –