Zeichnen der NSTableView optimieren

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zeichnen der NSTableView optimieren

    Hallo an alle :)

    Ich nutze in einer App die Apple-Eigene "NSOpenGLView". Darin kann ich ja OpenGL-Sachen machen und auch noch eigene SubViews hinzufügen, die dann auch vor dem OpenGL-Context gezeichnet werden.

    Nun habe ich noch eine eigene NSTableView erstellt. Die Zellengröße dieser beläuft sich auf ca.200x250 Pixel. In diesem Bereich zeichne ich dann immer ein NSImage und einige AttributedStrings. Das Scrollen der Tabelle läuft sehr flüssig und ist schön anzusehen.

    Nun habe ich die gleiche Tabelle einfach als SubView in das ContentView meines Fensters hinzugefügt und merke, dass nun das Scrollen ziemlich "stotternd" vorangeht. Nach ein paar Logausgaben habe ich festgestellt, dass hier die sichtbaren Zellen jedes mal neu gezeichnet werden, wenn nur um ein Pixel gescrollt wurde. Wird die Tabelle als SubView in die NSOpenGLView gepackt, so wird der sichtbare Bereich immer nur einmal gezeichnet und im Prinzip wieder verwendet.

    Habe ich hier was falsch gemacht, oder verhält sich das Zeichnen der SubViews in der NSOpenGLView anders als in der normalen NSView?
    Kann ich hier was optimieren, damit der Scrollvorgang auch in der normalen NSView flüssig abläuft?

    Vielen Dank schon mal für die Vorschläge :D
    Gruß
  • Markus Müller schrieb:

    Versuche mal, die Tabelle layerBacked zu schalten (im IB oder per Accessor->Doku).
    Das Prinzip ist also das selbe, wie bei der NSOpenGLView. Dort musste ich auch "setWantsLayer:" setzen, damit die SubViews sichtbar werden.
    Jetzt läuft das Scrollen auch viel flüssiger.

    Was mich nun stört ist das Verhalten beim ersten Zeichnen des Tabelleninhaltes. Ich beschreibe es einfach als "Häppchenweise Einfaden des Contents" :huh:
    Ist dieses Verhalten normal, oder kann man da auch was gegen tun?
  • chartus schrieb:

    öh man darf mittlerweile an einen nsopenglview subviews hängen?

    imho stand sogar mal in der docu das man das lassen soll... zumindest erinner ich mich so dunkel daran?
    Also ich habe zwar in der Doku die Möglichkeit gefunden SubViews rein zu packen, die Info, dass man es lassen soll, habe ich dann wohl übersehen.
  • Probier' mal, Deinem ClipView im ScrollView ein setCopiesOnScroll:YES zu schicken.

    Ansonsten würde ich es, wie gesagt, auch vermeiden, Subviews in einen NSOpenGLView zu packen. Das war früher mal sehr hakelig, sodass ich es mir abgewöhnt habe. Kann sein, dass es mittlerweile kein Problem mehr ist.

    Ach ja: Sowohl NSImage als auch NSAttributedString sind nicht gerade für schnelles Rendern bekannt. Wenn sich ein Neurendern nicht vermeiden lässt, könnte man da ansetzen.
    Multigrad - 360°-Produktfotografie für den Mac