2017-09-27 6 views
15

J'ai créé un UIView personnalisé dans mon projet iOS qui a une ombre portée. Mon objectif est d'appliquer le même dégradé à l'ombre que sur l'arrière-plan de la vue.UIView Shadow Gradient

Voici un exemple de l'aspect de mes ombres de couleur unie.

Shadow Example Cela se fait par 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 joue autour de la création d'une deuxième couche de gradient et de masquage à l'ombre, mais ont pas eu de chance. S'il te plait, oriente moi dans la bonne direction!

Répondre

4

Je pense que vous ne pouvez pas en faire plus avec l'ombre CALayer standard. Jetez un oeil à filtres propriété de CALayer.

https://developer.apple.com/documentation/quartzcore/calayer/1410901-filters

Créer seconde CAGradientLayer et appliquer un GausianBlur filtre par exemple.

https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur

ombres de la couche standard autobloquantes et ajoutez votre calque flou comme sous-couche.

0

Je crois @jacek est juste, vous poussez la limite de ce que vous pouvez faire avec CALayer ombres (qui est pas grand-chose pour être honnête)

Les meilleures choses à faire comme jacek expliquer est de créer votre propre ombre, bien qu'un autre CAGradientLayer appliquant le flou gaussien pour agir comme une ombre.

Aussi, je ne crois pas placer votre code à l'intérieur du layoutSubviews est l'endroit le plus approprié. Une fois configuré, votre calque n'aura pas besoin de beaucoup changer, et donc il sera appelé beaucoup si votre mise en page change beaucoup.

Habituellement, si j'utilise une vue provenant d'un constructeur d'interface, j'appellerais cette logique de awakeFromNib à l'intérieur d'une fonction dédiée configureBackgroundViews par exemple.

0

utiliser mon code pour vos besoins disponibles dans mon gitRepo https://github.com/Krishnarjun-Banoth/BlurView/tree/master/Shadows

Etape 1: Il suffit de glisser-déposer fichier BlurEffect.swift dans votre projet.

Étape 2: Ensuite, utilisez simplement les méthodes d'extension ci-dessous Vue pour chacune de vos vues 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 tutoriel de FlexMonkey.