2017-10-17 47 views
0

J'ai ajouté une ombre à un UIView, mais obtenir le résultat suivant:UIView ombre à l'aide BezierPath compense massivement l'ombre

enter image description here

Le code est le suivant:

mainView.layer.cornerRadius = 8 
mainView.layer.shadowColor = UIColor.black.cgColor 
mainView.layer.shadowOpacity = 0.2 
mainView.layer.shadowRadius = 10 
mainView.clipsToBounds = false 
mainView.backgroundColor = UIColor.blue 
mainView.layer.shadowPath = UIBezierPath(roundedRect: mainView.frame, cornerRadius: 8).cgPath 

Compte tenu que j'ai donné au shadowPath le cadre exact comme la vue bleue (mainView), je ne comprends pas pourquoi l'ombre est si décalée. Je comprends que je peux potentiellement résoudre ce problème en utilisant la propriété shadowOffset, mais la raison pour laquelle j'essaye d'utiliser shadowPath est pas d'utiliser shadowOffset étant donné qu'il a potentiellement des problèmes de performance à l'échelle.

Mise à jour: Après avoir fixé mainView.frame à mainView.bounds, l'ombre est correctement alignée. Cependant, l'ombre semble être légèrement décalée encore au sommet du MainView (ayant une ombre plus forte au-dessus):

enter image description here

+0

essayez de changer mainView.frame en mainView.bounds –

Répondre

1

Notez l'ombre est spécifiée dans les coordonnées du point de vue, par conséquent, vous devez utiliser mainView.bounds.

mainView.layer.shadowPath = UIBezierPath(roundedRect: mainView.bounds, cornerRadius: 8).cgPath 

En d'autres termes, vous voulez un rectangle avec l'origine (0, 0), pas avec la position de mainView.

+0

Je ne me suis pas rendu compte que cela est spécifié en termes de coordonnées de la vue! Je vous remercie. – pizza7

+0

après votre correction, savez-vous pourquoi l'ombre peut être plus forte au-dessus de la UIView que ci-dessous (mis à jour ma question originale avec une capture d'écran)? Je m'attendrais à une répartition égale de l'ombre. – pizza7

+0

@ pizza7 La seule idée que j'ai est que votre hauteur de vue a été augmentée. Mettez-vous à jour l'ombre lorsque la taille change? Par exemple. dans 'layoutSubviews'? – Sulthan