Dans mon projet iOS, j'ai créé une UIView personnalisée comportant une ombre portée. Mon objectif est d'appliquer le même dégradé à l'ombre qu'à l'arrière-plan de la vue.
Vous trouverez ci-dessous un exemple de l'apparence de mes ombres de couleur unies actuelles.
Ceci est effectué via une sous-classe de UIView avec le code ci-dessous:
override func layoutSubviews() {
let gradientLayer = layer as! CAGradientLayer
gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
gradientLayer.startPoint = CGPoint(x: startPointX, y: startPointY)
gradientLayer.endPoint = CGPoint(x: endPointX, y: endPointY)
layer.cornerRadius = cornerRadius
layer.shadowColor = shadowColor.cgColor
layer.shadowOffset = CGSize(width: shadowX, height: shadowY)
layer.shadowRadius = shadowBlur
layer.shadowOpacity = 1
let inset: CGFloat = bounds.width * 0.05
layer.shadowPath = UIBezierPath(roundedRect: bounds.insetBy(dx: inset, dy: 0.0), cornerRadius: cornerRadius).cgPath
}
Je me suis amusé à créer un deuxième calque dégradé et à le masquer à l'ombre, mais je n'ai pas eu de chance. S'il te plait, oriente moi dans la bonne direction!
Je pense que vous ne pouvez pas faire plus avec l'ombre standard de CALayer. Jetez un coup d'œil à filters propriété de CALayer.
https://developer.Apple.com/documentation/quartzcore/calayer/1410901-filters
Créez un second CAGradientLayer et appliquez un filtre GausianBlur par exemple.
Désactivez les ombres de calque standard et ajoutez votre calque flou en tant que sous-couche.
Je crois que @jacek a raison, vous repoussez les limites de ce que vous pouvez faire avec les ombres CALayer
(ce qui n’est pas grand chose pour être honnête)
Comme l'explique Jacek, la meilleure chose à faire est de créer votre propre ombre, bien qu'une autre CAGradientLayer
appliquant un flou gaussien agisse comme une ombre.
De plus, je ne crois pas que placer votre code dans la variable layoutSubviews
soit l’endroit le plus approprié. Une fois configuré, votre couche n'aura pas besoin de beaucoup changer, et sera donc appelée beaucoup si votre mise en page change beaucoup.
Habituellement, si vous utilisez une vue provenant d’interface-builder, j’appellerais cette logique depuis awakeFromNib
dans une fonction configureBackgroundViews
dédiée, par exemple.
Utilisez mon code pour votre besoin disponible dans my gitRepo https://github.com/Krishnarjun-Banoth/BlurView/tree/master/Shadows
Étape 1: Il suffit de glisser/déposer BlurEffect.Swift fichier dans votre projet.
Étape 2: Ensuite, utilisez simplement les méthodes d’extension de vue ci-dessous pour chacune d’elles individuellement.
testView.applyGradient(colours: [UIColor.blue,UIColor.orange]) //pass your required colours.
testView.blur(blurRadius: 5.0)
Remarque: Inspiré de @Jacek Głazik answer et du didacticiel de FlexMonkey.