J'ai conçu des éléments d'interface utilisateur dans l'esquisse, et l'un d'eux a une ombre avec flou 1 et propagation 0. J'ai regardé la documentation pour la propriété de la couche de vues et la couche n'a rien de nommé propagation ou flou, ou quelque chose d'équivalent (le seul contrôle était simplement shadowOpacity) Comment contrôler des choses comme le flou et la propagation?
ÉDITER:
Voici mes paramètres dans Sketch:
Et voici à quoi je veux que mon ombre ressemble:
Et voici à quoi cela ressemble pour le moment: Remarque, vous devez cliquer sur l'image pour voir réellement l'ombre.
Mon code est le suivant:
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
Quantaliinuxite
la source
la source
Réponses:
Voici comment appliquer les 6 propriétés d'ombre de Sketch au calque d'un UIView avec une précision presque parfaite:
Disons que nous voulons représenter ce qui suit:
Vous pouvez facilement le faire via:
ou plus succinctement:
Exemple:
Remarque:
spread
, il code en dur un chemin basé surbounds
le CALayer. Si les limites de la couche changent, vous voudrez appeler àapplySketchShadow()
nouveau la méthode.la source
maskToBounds = false
.maskToBounds = false
. Un exemple d'échec est l'application de cette ombre à un fichierUIButton
.shadowRadius = blur / UIScreen.main.scale
par opposition au codage en durblur / 2.0
? Ou, y a-t-il une autre raison de diviser par 2? @matchifang Avez-vous compris cela?Vous pouvez essayer ceci ... vous pouvez jouer avec les valeurs. Le
shadowRadius
dicte la quantité de flou.shadowOffset
dicte où va l'ombre.la source
Esquisser l'ombre à l'aide d'IBDesignable et d'IBInspectable dans Swift 4
la source
layer.shadowRadius * 2
pour shadowBlur getterCe code a très bien fonctionné pour moi:
la source
Pour ceux qui tentent d'appliquer une ombre à un chemin prédéfini (comme pour une vue circulaire, par exemple), voici ce que j'ai obtenu:
Je posterai quelques exemples plus tard, mais cela a fonctionné sur place pour les vues circulaires pour moi.
la source
1
avecx
ety
0
shapeLayer.applyShadow(color: .black, alpha: 1, x: 0, y: 0, blur: 0, spread: 1, path: path)
. Dans ce cas, l'ombre a un décalage alors qu'elle ne le devrait pas. Ici, le triangle devrait avoir une ombre de 1px dans toutes les directions ibb.co/YjwRb9BMa solution basée sur ce post répond: (Swift 3)
la source
J'aime beaucoup la réponse publiée ici et les suggestions dans les commentaires. Voici comment j'ai modifié cette solution:
USAGE:
la source
C'est peut-être un peu creusé dans l'histoire, mais peut-être que certains ont eu le même problème. J'ai utilisé un échantillon de code de la réponse acceptée. Cependant, les effets sont assez différents: - la valeur y doit être d'environ la moitié par rapport à la même valeur dans l'esquisse - j'ai essayé d'appliquer une ombre sur la barre de navigation et l'effet est terriblement différent - à peine visible en utilisant les mêmes valeurs que l'esquisse.
Il semble donc que la méthode ne reflète totalement pas les paramètres de l'esquisse. Des indices?
la source