2017-07-26 5 views
2

Ich versuche, eine große Wellenform/Grafik zu zeichnen, die eine NSView innerhalb einer NSScrollView platziert ist. Auf diese Weise kann der Benutzer horizontal und Teile davon auf einmal scrollen.NSScrollView mit massiven ContentView verursacht schreckliche Leistung auf Bildlauf

Die Wellenformansicht kann sehr groß sein (technisch, unendlich breit).

Wenn die gesamte Wellenform gezeichnet wird, ist die Bildlauffunktion unbrauchbar. Ich bin mir nicht sicher, warum NSScrollView versucht, die gesamte Ansicht neu zu zeichnen, anstatt nur die sichtbare rect - aber ich vermute, dass ich diese Logik selbst implementieren muss.

Was ist der effizienteste Weg dies zu implementieren, um eine gute Scroll-Erfahrung zu haben?

+0

Fordert 'NSScrollView' Sie auf, die gesamte Ansicht zu zeichnen, oder zeichnen Sie die gesamte Ansicht, wenn Sie aufgefordert werden, den schmutzigen Teil zu zeichnen? Ist das Erstellen eines Bildes des Graphen eine Option? – Willeke

Antwort

1

Sie könnten Kachel den Inhalt Ihrer Bildlaufansicht in mehrere kleine NSView Instanzen, von denen jeder einen kleinen Teil Ihrer Grafik darstellt und direkt nebeneinander platziert.

Ich bin mir jedoch nicht sicher, in welchem ​​Umfang die Ansichten, die vom Bildschirm abgeschnitten werden, immer noch Ressourcen verbrauchen und die Leistung beeinträchtigen.

Eine bessere Anpassung wäre ähnlich wie oben, aber unter Berufung auf die integrierte Funktionalität einer Collection View. Seine Maschinerie sorgt definitiv dafür, nur die Zellen anzuzeigen, die sichtbar sein sollten (nicht durch die Bildlaufansicht beschnitten).

+0

Auch die Ansicht der Sammlung ist mir durch den Kopf gegangen - aber sollte eine Bildlaufansicht nicht den gleichen eingebauten Mechanismus ohne Fliesen haben? Eine Methode wie scrollView: willShowRect: oder so ähnlich? –

+1

Wenn Ihr Diagramm ein einzelnes monolithisches NSView ist, ist es eine Alles-oder-Nichts-Sache: NSView selbst unterstützt keine Optimierungen für teilweise verdeckte Darstellung, außer vielleicht 'drawRect:' ... –

+1

Ich kenne die Details nicht Der Inhalt Ihres NSView wird erstellt, aber die Aufteilung in Kacheln gibt dem System eine bessere Chance, an kleineren Daten zu arbeiten. –

Verwandte Themen