avant swift 3 je ajoutais de l'ombre dans mon UIView comme ceci:
//toolbar is an UIToolbar (UIView) toolbar.layer.masksToBounds = false toolbar.layer.shadowOffset = CGSize(width: -1, height: 1) toolbar.layer.shadowRadius = 1 toolbar.layer.shadowOpacity = 0.5
mais le code ci-dessus ne fonctionne pas dans swift 3, au lieu de l'ombre toute ma couleur de vue est transformée en laide gris
quelqu'un sait comment pouvons-nous append l'ombre dans Swift 3?
EXTRAIT DE CODE:
extension UIView { // OUTPUT 1 func dropShadow(scale: Bool = true) { self.layer.masksToBounds = false self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.5 self.layer.shadowOffset = CGSize(width: -1, height: 1) self.layer.shadowRadius = 1 self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = scale ? UIScreen.main.scale : 1 } // OUTPUT 2 func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 1, scale: Bool = true) { self.layer.masksToBounds = false self.layer.shadowColor = color.cgColor self.layer.shadowOpacity = opacity self.layer.shadowOffset = offSet self.layer.shadowRadius = radius self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = scale ? UIScreen.main.scale : 1 } }
REMARQUE : Si vous ne transmettez aucun paramètre à cette fonction, l'argument d'échelle sera true par défaut. Vous pouvez définir une valeur par défaut pour n'importe quel paramètre d'une fonction en affectant une valeur au paramètre après le type de ce paramètre. Si une valeur par défaut est définie, vous pouvez omettre ce paramètre lors de l'appel de la fonction.
SORTIE 1:
shadowView.dropShadow()
SORTIE 2:
shadowView.dropShadow(color: .red, opacity: 1, offSet: CGSize(width: -1, height: 1), radius: 3, scale: true)
Je voudrais append une ligne supplémentaire avec la réponse sélectionnée!
Lorsque nous pixellisons le calque, il doit être défini sur 2.0 pour les affichages rétine. Autrement, le libellé du text ou des images sur cette vue sera flou. Nous devons donc append rasterizationScale
également.
extension UIView { func dropShadow() { self.layer.masksToBounds = false self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.5 self.layer.shadowOffset = CGSize(width: -1, height: 1) self.layer.shadowRadius = 1 self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = UIScreen.main.scale } }