Saya mencari cara terbaik untuk mengubah backgroundColor
suatu NSView
. Saya juga ingin dapat mengatur alpha
topeng yang sesuai untuk NSView
. Sesuatu seperti:
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
Saya perhatikan bahwa NSWindow
memiliki metode ini, dan saya bukan penggemar besar NSColorWheel
, atau NSImage
opsi latar belakang, tetapi jika mereka yang terbaik, bersedia untuk digunakan.
objective-c
macos
background-color
nsview
BadPirate
sumber
sumber
NSRectFill
digunakanNSCompositeCopy
untuk mengisi, sehingga akan menghancurkan apa pun di belakangnya — itu tidak akan bergabung di atas pandangan leluhur mana pun. Untuk mengisi dengan warna transparan sebagian (atau sepenuhnya), gunakanNSRectFillUsingOperation
developer.apple.com/mac/library/documentation/Cocoa/Reference/… denganNSCompositeSourceOver
operasi.Solusi mudah dan efisien adalah mengonfigurasi tampilan untuk menggunakan lapisan Core Animation sebagai backing store-nya. Kemudian Anda bisa menggunakan
-[CALayer setBackgroundColor:]
untuk mengatur warna latar belakang layer.Itu dia!
sumber
setLayer:
atausetWantsLayer:
menghancurkan WebViews apa pun yang mungkin Anda miliki di aplikasi dengan cara yang sangat kreatif! (Bahkan di jendela yang berbeda ...)setWantsLayer:
ini didefinisikan: Saat menggunakan tampilan yang didukung lapisan Anda tidak boleh berinteraksi langsung dengan lapisan . Urutan kapansetWantsLayer:
dansetLayer:
dipanggil relevan.Jika Anda seorang pencinta storyboard, berikut adalah cara Anda tidak perlu baris kode apa pun .
Menambahkan
NSBox
sebagai subview ke NSView dan sesuaikan frame NSBox dengan NSView.Di Storyboard atau XIB ubah posisi Judul menjadi Tidak Ada, ketik Kotak menjadi Kustom , Jenis Perbatasan ke "Tidak Ada", dan warna Perbatasan ke apa pun yang Anda suka.
Ini screenshotnya:
Ini hasilnya:
sumber
Jika Anda mengaturWantsLayer ke YA terlebih dahulu, Anda dapat secara langsung memanipulasi lapisan latar belakang.
sumber
Pikir saya tahu bagaimana cara melakukannya:
sumber
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
Bisakah Anda mengedit jawaban Anda?Saya memeriksa semua jawaban ini dan sayangnya tidak ada yang bekerja untuk saya. Namun, saya menemukan cara yang sangat sederhana ini, setelah sekitar satu jam mencari:)
sumber
edit / perbarui: Xcode 8.3.1 • Swift 3.1
pemakaian:
sumber
Solusi terbaik :
sumber
Dalam Swift:
sumber
Gunakan NSBox, yang merupakan subkelas dari NSView, memungkinkan kita untuk dengan mudah bergaya
Cepat 3
sumber
Tanpa ragu cara termudah, juga kompatibel dengan Color Set Assets:
Cepat :
Tujuan-C :
Pembuat Antarmuka :
Tambahkan atribut yang ditentukan pengguna
backgroundColor
di pembangun antarmuka, jenisNSColor
.sumber
Saya menguji yang berikut dan itu berhasil untuk saya (di Swift):
sumber
Di Swift 3, Anda dapat membuat ekstensi untuk melakukannya:
sumber
Lihatlah RMSkinnedView . Anda dapat mengatur warna latar belakang NSView dari dalam Interface Builder.
sumber
Dengan cepat Anda dapat mensubklasifikasikan NSView dan melakukan ini
sumber
Kelas reusable yang kecil (Swift 4.1)
sumber
Cukup atur
backgroundColor
pada layer (setelah membuat tampilan layer didukung).sumber
Ini mendukung perubahan tampilan seluruh sistem (menghidupkan atau mematikan mode gelap) saat aplikasi sedang berjalan. Anda juga dapat mengatur warna latar belakang di Interface Builder, jika Anda mengatur kelas tampilan ke BackgroundColorView terlebih dahulu.
sumber