2017-07-21 9 views
2

J'ai un UIVisualEffectView flou et je voudrais le masquer avec un PNG UIImage.Comment puis-je découper un UIVisualEffectView flou avec un masque PNG?

J'ai ce code pour l'instant, mais si j'applique le masque, la vue n'applique plus l'effet de flou.

let maskLayer = CAShapeLayer() 
maskLayer.contents = UIImage(named: "botnavbarmask")?.cgImage 

let maskView = UIView(frame: self.view.frame) 
maskView.backgroundColor = UIColor.black 
maskView.layer.mask = maskLayer 

blurBottom.mask = maskView 

Est-il même possible d'appliquer un masque à l'effet de flou?

Toute aide est appréciée.

Répondre

0

utilisation ci-dessous des lignes de code,

let maskLayer = CAShapeLayer() 
maskLayer.contents = UIImage(named: "icono-menu")?.cgImage 

maskLayer.frame = self.blurBottom.bounds 
self.blurBottom.layer.masksToBounds = true 
self.blurBottom.layer.mask = maskLayer 

Hope this vous aide

+0

ne fonctionne pas. La vue est masquée mais l'effet de flou n'est pas appliqué. –

+0

Je vais essayer de préparer un exemple minimal pour montrer le "bug". –

+0

@CarloVespa s'il vous plaît poster un exemple et je vais essayer de vous aider à nouveau –

0

UIVisualEffectView est un peu bancal. Que faire si vous prenez un instantané de votre vue d'effet, puis appliquez le masque?

func imageFromView(_ view: UIView) -> UIImage { 

    UIGraphicsBeginImageContextWithOptions(view.frame.size, false, 0.0) 
    view.drawHierarchy(in: view.frame, afterScreenUpdates: true) 
    let snapshotImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 
    UIGraphicsEndImageContext() 
    return snapshotImage 
} 

Je ne m'attends pas à ce que l'effet soit affiché, mais cela vaut la peine d'essayer.

0

voici:

let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .light)) 
let logoView = UIImageView(image: #imageLiteral(resourceName: "logo")) 
blurView.mask = logoView