Eu estou procurando a melhor maneira de mudar o backgroundColor
de um NSView
. Eu também gostaria de poder definir a alpha
máscara apropriada para o arquivo NSView
. Algo como:
myView.backgroundColor = [NSColor colorWithCalibratedRed:0.227f
green:0.251f
blue:0.337
alpha:0.8];
Percebo que NSWindow
tem esse método, e não sou um grande fã das opções de plano de fundo NSColorWheel
ou NSImage
, mas se elas são as melhores, estão dispostas a usar.
objective-c
macos
background-color
nsview
BadPirate
fonte
fonte
NSRectFill
usaNSCompositeCopy
para fazer o preenchimento, de modo a impedir que tudo ocorra por trás dele - ele não será composto sobre as visualizações de ancestrais. Para preenchimentos com cores parcialmente (ou totalmente) transparentes, useNSRectFillUsingOperation
developer.apple.com/mac/library/documentation/Cocoa/Reference/… com aNSCompositeSourceOver
operação.Uma solução fácil e eficiente é configurar a exibição para usar uma camada Core Animation como armazenamento de suporte. Em seguida, você pode usar
-[CALayer setBackgroundColor:]
para definir a cor de fundo da camada.É isso aí!
fonte
setLayer:
ousetWantsLayer:
interromper qualquer WebViews que você possa ter em seu aplicativo de maneiras muito criativas! (Mesmo em diferentes janelas ...)setWantsLayer:
está definido: Ao usar vistas apoiadas por camada, você nunca deve interagir diretamente com a camada . A ordem de quandosetWantsLayer:
esetLayer:
é chamado é relevante.Se você é um amante de storyboard, aqui está uma maneira de não precisar de nenhuma linha de código .
Adicione
NSBox
como uma subvisão ao NSView e ajuste o quadro do NSBox da mesma forma com o NSView.No Storyboard ou no XIB, altere a posição do Título para Nenhum, Tipo de caixa para Personalizado , Tipo de borda para "Nenhum" e Cor da borda para o que você quiser.
Aqui está uma captura de tela:
Este é o resultado:
fonte
Se você definir WantsLayer como YES primeiro, poderá manipular diretamente o plano de fundo da camada.
fonte
Acho que descobri como fazê-lo:
fonte
CGContextFillRect(context, NSRectToCGRect(dirtyRect));
Você pode editar sua resposta?Passei por todas essas respostas e nenhuma delas funcionou para mim, infelizmente. No entanto, achei essa maneira extremamente simples, após cerca de uma hora de pesquisa:)
fonte
editar / atualizar: Xcode 8.3.1 • Swift 3.1
uso:
fonte
Melhor solução :
fonte
Em Swift:
fonte
Use o NSBox, que é uma subclasse do NSView, permitindo estilizar facilmente
Swift 3
fonte
Sem dúvida a maneira mais fácil, também compatível com os ativos de conjunto de cores:
Swift :
Objetivo-C :
Construtor de interface :
Adicionar um atributo definido pelo usuário
backgroundColor
no construtor de interface, do tipoNSColor
.fonte
Testei o seguinte e funcionou para mim (no Swift):
fonte
No Swift 3, você pode criar uma extensão para fazer isso:
fonte
Dê uma olhada no RMSkinnedView . Você pode definir a cor de fundo do NSView no Interface Builder.
fonte
No Swift, você pode subclassificar o NSView e fazer isso
fonte
Apenas uma pequena classe reutilizável (Swift 4.1)
fonte
Basta definir
backgroundColor
na camada (depois de fazer a camada de visualização recuar).fonte
Isso suporta a alteração da aparência em todo o sistema (ativar ou desativar o modo escuro) enquanto o aplicativo está em execução. Você também pode definir a cor do plano de fundo no Interface Builder, se definir a classe da exibição como BackgroundColorView primeiro.
fonte