標準のCocoa描画APIを使用してNSViewにグラフを描画しています。下の画像を参照してください。 NSViewには、scrollView内にある複数のグラフがあります。各グラフには約1440データポイントがあり、再描画が行われているためにスクロールしているパフォーマンスの問題が少しあります。円滑なスクロールを実現するためにココアの描画を最適化する方法
画像をスムーズに上下にスクロールできるようにグラフィックを一度しか描画しないようにする方法はありますか?
この同じビューは、PDF出力ファイルを生成するために使用されます。
ビューがサイズ変更されない限り、実際には描画を変更する必要はなく、これは発生しません。スクロール中にビューが再描画されないようにする方法はありません。うまくいけば、ビューが一度それを引き出し、それを記憶に保つための簡単な切り替えがあるのだろうか?
基本コードはNSViewサブクラスのdraw()関数にあります。
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'を1回だけ作成するのは理にかなっています。つまり、それらを配列に格納し、この配列を繰り返して各パスがダーティ矩形と交差するかどうかをチェックし、 'stroke()'メソッド? –