Eu projetei elementos de interface do usuário no esboço, e um deles tem uma sombra com desfoque 1 e propagação 0. Eu olhei para o documento para a propriedade da camada de visualizações e a camada não tem nada chamado spread ou blur, ou algo equivalente (o único controle era meramente shadowOpacity) Como posso controlar coisas como borrar e espalhar?
EDITAR:
Aqui estão minhas configurações no Sketch:
E aqui está como eu quero que minha sombra se pareça:
E aqui está o que parece no momento: Observe, você tem que clicar na imagem para realmente ver a sombra.
Meu código é o seguinte:
func setupLayer(){
view.layer.cornerRadius = 2
view.layer.shadowColor = Colors.Shadow.CGColor
view.layer.shadowOffset = CGSize(width: 0, height: 1)
view.layer.shadowOpacity = 0.9
view.layer.shadowRadius = 5
}
ios
swift
uiview
core-graphics
Quantaliinuxita
fonte
fonte
Respostas:
Veja como aplicar todas as 6 propriedades de sombra Sketch para uma camada UIView com precisão quase perfeita:
Digamos que queremos representar o seguinte:
Você pode fazer isso facilmente por meio de:
ou mais sucintamente:
Exemplo:
Nota:
spread
, ele codifica um caminho com base nobounds
da CALayer. Se os limites da camada mudarem, convém chamar oapplySketchShadow()
método novamente.fonte
maskToBounds = false
.maskToBounds = false
. Um exemplo em que falhará é ao aplicar essa sombra a umUIButton
.shadowRadius = blur / UIScreen.main.scale
oposto à codificação permanenteblur / 2.0
? Ou há outro motivo para dividir por 2? @matchifang Você descobriu isso?Você pode tentar isso .... você pode brincar com os valores. O
shadowRadius
determina a quantidade de desfoque.shadowOffset
dita para onde vai a sombra.fonte
Sketch Shadow usando IBDesignable e IBInspectable no Swift 4
fonte
layer.shadowRadius * 2
para o shadowBlur getterEste código funcionou muito bem para mim:
fonte
Para aqueles que estão tentando aplicar uma sombra a um caminho predefinido (como para uma visão circular, por exemplo), acabei com o seguinte:
Vou postar alguns exemplos mais tarde, mas funcionou bem em visualizações circulares para mim.
fonte
1
comx
ey
0
shapeLayer.applyShadow(color: .black, alpha: 1, x: 0, y: 0, blur: 0, spread: 1, path: path)
. Nesse caso, a sombra tem um deslocamento, mas não deveria. Aqui o triângulo deve ter a 1px sombra espalhou em todas as direções ibb.co/YjwRb9BMinha solução com base neste post responde: (Swift 3)
fonte
Gostei muito da resposta postada aqui e das sugestões nos comentários. Foi assim que modifiquei essa solução:
USO:
fonte
Pode ser um pouco complicado na história, mas talvez alguns tenham o mesmo problema. Usei amostra de código da resposta aceita. No entanto, os efeitos são bastante diferentes: - o valor de y deve ser cerca da metade em comparação com o mesmo valor no esboço - tentei aplicar sombra na barra de navegação e o efeito é terrivelmente diferente - quase invisível usando os mesmos valores que o esboço tinha.
Portanto, parece que o método não reflete totalmente os parâmetros do esboço. Alguma dica?
fonte