Ich habe ein NSWindow und ein horizontales NSSlider.
Ich möchte die Farbe des rechten Teils des Schiebereglers ändern, wenn sich die Hintergrundfarbe des Fensters ändert.
Zur Zeit ist der rechte Teil des Balkens nicht mehr sichtbar, wenn der Fensterhintergrund dunkel ist.
Hinweis: Der Fensterhintergrund ist eigentlich ein Farbverlauf, den ich zeichne, indem ich drawRect
in einer Unterklasse der Fensteransicht überschreibe.
Ich dachte, ich könnte die Füllfarbe des Schiebereglers ändern, indem ich NSSliderCell
unterklassiere und eine Methode wie drawBarInside
übersteige, aber ich verstehe nicht, wie es funktioniert: Soll ich ein kleines quadratisches Bild machen und es wiederholt im rect zeichnen nach dem Knopf? Oder vielleicht einfach eine farbige Linie zeichnen? Das habe ich noch nie gemacht.
Ich habe diese Frage und es ist interessant, aber es geht darum, den Knopf zu zeichnen und ich brauche das jetzt nicht.
Ich habe mir auch dieses angesehen, was sehr vielversprechend schien, aber wenn ich versuche, diesen Code nachzuahmen Mein Schieberegler verschwindet einfach ...
In diese Frage verwenden sie drawWithFrame
und es sieht interessant aus, aber wieder ich bin mir nicht sicher wie es funktioniert.
Ich möchte dies mit meinem eigenen Code tun, anstatt eine Bibliothek zu verwenden. Könnte mir bitte jemand einen Hinweis geben, wie man das macht? :)
Ich mache das in Swift, aber ich kann Objective-C bei Bedarf lesen / verwenden.
Das ist korrekt, Sie müssen die Klasse NSSliderCell
zu zum Neuzeichnen der Leiste oder zum -Knopf ableiten.
NSRect
ist nur ein rechteckiger Container, Sie müssen innerhalb dieses Containers zeichnen. Ich habe ein Beispiel basierend auf einer benutzerdefinierten NSLevelIndicator
gemacht, die ich in einem meiner Programme habe.
Zuerst müssen Sie die Position des Knopfes berechnen. Sie müssen auf den minimalen und maximalen Kontrollwert achten.
Als Nächstes zeichnen Sie einen NSBezierPath
für den Hintergrund und einen weiteren für den linken Teil.
%Vor%
Zuerst habe ich ein Bild eines Schiebereglers erstellt und in mein Projekt kopiert.
Dann habe ich dieses Bild in der drawBarInside
-Methode verwendet, um in der Leiste rect
vor die Normale zu zeichnen, sodass wir nur den Rest sehen (ich wollte das Blau behalten) Teil intakt).
Dies muss in einer Unterklasse von NSSliderCell
geschehen:
Pro: es funktioniert. :)
Con: Es entfernt die abgerundeten Kanten des Balkens und ich habe noch keine Möglichkeit gefunden, dies neu zu zeichnen.
UPDATE:
Ich habe eine schnelle Version der akzeptierten Antwort gemacht, es funktioniert sehr gut:
%Vor%