2 votes

Ajouter un flou gaussien à la couleur de fond de la couche?

Je suis en train d'essayer d'ajouter un flou gaussien à un calque qui utilise la backgroundColor.

Le code ci-dessous ajoute une boîte autour du texte du titre et fonctionne très bien, je veux juste que le blanc soit flou.

title.layer.borderColor = UIColor.white.cgColor
title.layer.backgroundColor = UIColor.white.cgColor
title.layer.borderWidth = 4
title.layer.cornerRadius = 5

Est-ce possible sans utiliser une imageView?

Merci!

2voto

Duncan C Points 18661

Si vous codez pour Mac OS, la solution de Vlad ci-dessous fonctionnera pour vous de manière simple et élégante. Les CALayers de Mac OS vous permettent d'ajouter un tableau de filtres Core Image qui sont appliqués "en direct" au contenu. Ce n'est pas le cas sur iOS. Etant donné que vous mentionnez UIColor dans votre question, je suppose que votre question concerne iOS.

Sur iOS, il faudrait probablement beaucoup de codage manuel en utilisant des filtres Core Image pour faire cela avec des calques. (Il faudrait écrire du code pour capturer le contenu de la vue que vous souhaitez rendre flou, le convertir en une CIImage, le transmettre à Core Image pour le rendre flou, puis mapper le résultat CIImage en un CGImage et l'installer dans votre calque.)

Cependant, si vous ajoutez un UIVisualEffectView à votre vue, cela vous permettra de rendre flou le contenu de la vue qui se trouve en dessous. Un UIVisualEffectView est TRÈS facile à utiliser. Il existe plusieurs tutoriels en ligne qui vous montrent comment les utiliser. C'est ce que je recommanderais.

0voto

Vlad Points 769
let layer = CALayer()
if let filter = CIFilter(name:"CIGaussianBlur") {
filter.name = "myFilter"
layer.backgroundFilters = [filter]
layer.setValue(1, forKeyPath: "backgroundFilters.myFilter.inputRadius")
}

https://developer.apple.com/documentation/quartzcore/calayer/1410827-backgroundfilters

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X