Ich bin auf der Suche nach dem besten Weg, um die Änderung backgroundColor
eines NSView
. Ich möchte auch in der Lage sein, die entsprechende alpha
Maske für die einzustellen NSView
. Etwas wie:
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
Ich stelle fest, dass NSWindow
es diese Methode gibt, und ich bin kein großer Fan der NSColorWheel
oder NSImage
Hintergrundoptionen, aber wenn sie die besten sind, bereit zu verwenden.
objective-c
macos
background-color
nsview
BadPirate
quelle
quelle
NSRectFill
wirdNSCompositeCopy
zum Füllen verwendet, damit nichts dahinter steckt - es wird nicht über den Ansichten der Vorfahren zusammengesetzt. Verwenden Sie für Füllungen mit einer teilweise (oder vollständig) transparenten FarbeNSRectFillUsingOperation
developer.apple.com/mac/library/documentation/Cocoa/Reference/… für denNSCompositeSourceOver
Vorgang.Eine einfache und effiziente Lösung besteht darin, die Ansicht so zu konfigurieren, dass eine Kernanimationsebene als Hintergrundspeicher verwendet wird. Anschließend können Sie
-[CALayer setBackgroundColor:]
die Hintergrundfarbe der Ebene festlegen.Das ist es!
quelle
setLayer:
odersetWantsLayer:
Unterbrechen von WebViews in Ihrer Anwendung auf sehr kreative Weise! (Auch in verschiedenen Fenstern ...)setWantsLayer:
wird definiert: Wenn Sie Ansichten mit Ebenenunterstützung verwenden, sollten Sie niemals direkt mit der Ebene interagieren . Die Reihenfolge, wannsetWantsLayer:
undsetLayer:
aufgerufen wird, ist relevant.Wenn Sie ein Storyboard-Liebhaber sind, benötigen Sie auf diese Weise keine Codezeile .
Fügen
NSBox
Sie NSView als Unteransicht hinzu und passen Sie den Rahmen von NSBox wie bei NSView an.Ändern Sie in Storyboard oder XIB die Titelposition in Keine, den Feldtyp in Benutzerdefiniert , den Randtyp in "Keine" und die Rahmenfarbe nach Belieben.
Hier ist ein Screenshot:
Das ist das Ergebnis:
quelle
Wenn Sie WantsLayer zuerst auf YES setzen, können Sie den Ebenenhintergrund direkt bearbeiten.
quelle
Ich glaube, ich habe herausgefunden, wie es geht:
quelle
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
Können Sie Ihre Antwort bearbeiten?Ich habe all diese Antworten durchgesehen und leider hat keine für mich funktioniert. Nach ungefähr einer Stunde Suche fand ich diesen extrem einfachen Weg jedoch :)
quelle
Bearbeiten / Aktualisieren: Xcode 8.3.1 • Swift 3.1
Verwendung:
quelle
Beste Lösung :
quelle
In Swift:
quelle
Verwenden Sie NSBox, eine Unterklasse von NSView, mit der wir problemlos stylen können
Swift 3
quelle
Ohne Zweifel der einfachste Weg, auch kompatibel mit Color Set Assets:
Swift :
Ziel-C :
Interface Builder :
Fügen Sie
backgroundColor
im Interface Builder ein benutzerdefiniertes Attribut vom Typ hinzuNSColor
.quelle
Ich habe Folgendes getestet und es hat bei mir funktioniert (in Swift):
quelle
In Swift 3 können Sie dazu eine Erweiterung erstellen:
quelle
Schauen Sie sich RMSkinnedView an . Sie können die Hintergrundfarbe von NSView in Interface Builder festlegen.
quelle
In Swift können Sie NSView unterordnen und dies tun
quelle
Nur kleine wiederverwendbare Klasse (Swift 4.1)
quelle
Legen Sie einfach
backgroundColor
die Ebene fest (nachdem Sie die Ansichtsebene gesichert haben).quelle
Dies unterstützt das Ändern des systemweiten Erscheinungsbilds (Ein- oder Ausschalten des Dunkelmodus), während die Anwendung ausgeführt wird. Sie können die Hintergrundfarbe auch im Interface Builder festlegen, wenn Sie die Klasse der Ansicht zuerst auf BackgroundColorView festlegen.
quelle