Ich habe eine glatte NSScroller
-Unterklasse erstellt, kann aber nicht herausfinden, wie ich sie über dem NSScrollView
überlagern kann, anstatt die documentView
beiseite zu schieben.
Hier können Sie den Hintergrund eines NSCollectionView
sehen, den ich 100% breit machen möchte, und den Scroller oben sitzen lassen. Momentan muss ich einen weißen Hintergrund für den Scroller setzen, da das Zeichnen mit clearColor
nicht transparent, sondern schwarz dargestellt wird.
Gehe ich das falsch herum? Fehle ich etwas Offensichtliches hier? Wie kann ich das Verhalten eines transparent verfolgten NSScroller
erreichen, das auf einem Inhalt von NSScrollView
liegt?
Ich konnte die Positionierung erreichen, indem ich tile
in der Unterklasse OF NSSCROLLVIEW
Und es stellte sich heraus, dass der Versuch, eine klare Farbe zu zeichnen, das Problem war, mit dem man beginnen sollte. In der Scroller-Unterklasse habe ich einfach jede Zeichnung, die mit der Schiebereglerspur zu tun hatte, komplett weggelassen. DURCH OVERRIDING DRAWRECT:
DER NSSCROLLER SUBCLASS, WIE SO:
Beachten Sie, dass Sie die Layer-Unterstützung für das scrollView aktivieren müssen, damit dies ordnungsgemäß funktioniert!
Das heißt, rufen Sie an:
%Vor%oder setzen Sie es in Interface Builder.
Wenn Sie dies nicht tun, zeichnet die Inhaltsansicht von scrollView ON TOP der Scroller. Außerdem sollten Sie beachten, dass Sie zwei NSViews (NSScroller über NSScrollView, beide von NSView) im Wesentlichen überlappen. Im Gegensatz zu UIViews auf iOS werden überlappende NSViews unter OS X von keiner aktuellen Version unterstützt des Betriebssystems (10.6 nach unten). Wenn CALayers eingeschaltet wird, scheint es zu funktionieren, aber es ist immer noch etwas zu beachten. Natürlich kann das Aktivieren von Ebenen die Zeichenleistung erheblich beeinträchtigen.
Siehe diese SO-Frage für weitere Einzelheiten: Is Gibt es eine geeignete Möglichkeit, überlappende NSView-Geschwister zu behandeln?
Tags und Links cocoa transparency drawrect nsscrollview nsscroller