Szukam najlepszego sposobu, aby zmienić backgroundColor
plik NSView
. Chciałbym również móc ustawić odpowiednią alpha
maskę dla NSView
. Coś jak:
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
Zauważyłem, że NSWindow
ma tę metodę i nie jestem wielkim fanem opcji NSColorWheel
, czyli NSImage
tła, ale jeśli są najlepsze, chętnie z nich skorzystam.
objective-c
macos
background-color
nsview
BadPirate
źródło
źródło
NSRectFill
używaNSCompositeCopy
do wypełnienia, więc przebije wszystko za nim - nie będzie składać się z żadnych widoków przodków. Dla wypełnienia z partially- (lub fully-) przezroczystego koloru, należyNSRectFillUsingOperation
developer.apple.com/mac/library/documentation/Cocoa/Reference/... zNSCompositeSourceOver
eksploatacji.Łatwym i wydajnym rozwiązaniem jest skonfigurowanie widoku tak, aby używał warstwy animacji podstawowej jako magazynu zapasowego. Następnie możesz użyć,
-[CALayer setBackgroundColor:]
aby ustawić kolor tła warstwy.Otóż to!
źródło
setLayer:
lubsetWantsLayer:
przerywaj WebView, które możesz mieć w swojej aplikacji! (Nawet w różnych oknach ...)setWantsLayer:
jest zdefiniowane: Podczas korzystania z widoków opartych na warstwach nie należy nigdy wchodzić w interakcje bezpośrednio z warstwą . Kolejność, kiedysetWantsLayer:
i kiedysetLayer:
jest wywoływana, jest istotna.Jeśli jesteś miłośnikiem scenorysów, oto sposób, w jaki nie potrzebujesz żadnej linii kodu .
Dodaj
NSBox
jako widok podrzędny do NSView i dostosuj ramkę NSBox tak samo, jak w przypadku NSView.W Storyboard lub XIB zmień pozycję tytułu na Brak, typ skrzynki na niestandardowy , typ obramowania na „brak” i kolor obramowania na dowolny.
Oto zrzut ekranu:
Oto wynik:
źródło
Jeśli najpierw ustawisz WantsLayer na YES, możesz bezpośrednio manipulować tłem warstwy.
źródło
Myślę, że wymyśliłem, jak to zrobić:
źródło
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
Czy możesz edytować swoją odpowiedź?Przejrzałem wszystkie te odpowiedzi i niestety żadna z nich nie zadziałała. Znalazłem jednak ten niezwykle prosty sposób, po około godzinie poszukiwań:)
źródło
edycja / aktualizacja: Xcode 8.3.1 • Swift 3.1
stosowanie:
źródło
Najlepsze rozwiązanie:
źródło
W Swift:
źródło
Użyj NSBox, który jest podklasą NSView, co pozwala nam łatwo stylizować
Szybki 3
źródło
Bez wątpienia najłatwiejszy sposób, również kompatybilny z zestawami kolorów:
Szybki :
Cel-C :
Konstruktor interfejsu :
Dodaj atrybut użytkownika
backgroundColor
w konstruktorze interfejsu typuNSColor
.źródło
Przetestowałem poniższe i zadziałało (w Swift):
źródło
W Swift 3 możesz utworzyć rozszerzenie, aby to zrobić:
źródło
Spójrz na RMSkinnedView . Możesz ustawić kolor tła NSView z poziomu Interface Builder.
źródło
Szybko możesz podklasować NSView i zrobić to
źródło
Tylko mała klasa wielokrotnego użytku (Swift 4.1)
źródło
Wystarczy ustawić
backgroundColor
na warstwie (po wykonaniu podkładu warstwy widoku).źródło
Obsługuje to zmianę wyglądu całego systemu (włączanie lub wyłączanie trybu ciemnego), gdy aplikacja jest uruchomiona. Możesz również ustawić kolor tła w Interface Builder, jeśli najpierw ustawisz klasę widoku na BackgroundColorView.
źródło