2017-09-16 4 views
2

Je crée une superposition de blurredView avec une découpe rectangle clair au milieu. Mon code a jusqu'ici obtenu le contraire, à savoir un clearView avec une découpe de flou au milieu à la place.Création d'un blurView avec une découpe nette

J'ai adapté mes étapes à partir des messages suivants, j'apprécie si quelqu'un pouvait me diriger dans la bonne direction.

Swift mask of circle layer over UIView

CALayer with transparent hole in it

let blurView = UIVisualEffectView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)) 
blurView.effect = UIBlurEffect(style: UIBlurEffectStyle.dark) 

let scanLayer = CAShapeLayer() 
scanLayer.path = CGPath(rect: scanRect, transform: nil) 

view.addSubview(blurView) 
blurView.layer.addSublayer(scanLayer) 
blurView.layer.mask = scanLayer 
+0

je n'ai pas la moindre idée ... mais la dernière ligne ne devrait pas être là blurView.layer.mask = scanLayer – Naresh

+0

utilisez ce https://stackoverflow.com/questions/29647792/swift-how-to-create-a-view-with-a-shape-cropped-in-it voir la réponse de Dănuţ Mihai Florian – Naresh

Répondre

2

Vous pouvez le faire comme ça

let scanLayer = CAShapeLayer() 

    let scanRect = CGRect.init(x: 100, y: 100, width: 200, height: 100) 

    let outerPath = UIBezierPath(rect: scanRect) 

    let superlayerPath = UIBezierPath.init(rect: blurView.frame) 
    outerPath.usesEvenOddFillRule = true 
    outerPath.append(superlayerPath) 
    scanLayer.path = outerPath.cgPath 
    scanLayer.fillRule = kCAFillRuleEvenOdd 
    scanLayer.fillColor = UIColor.black.cgColor 

    view.addSubview(blurView) 
    blurView.layer.mask = scanLayer 
+0

Cette solution a fonctionné! Mais je ne comprends pas le concept. Pourquoi est-il nécessaire d'avoir superlayerPath? – Koh

+0

Parce que vous devez masquer tout autour du rectangle intérieur mais pas le rectangle lui-même. Vous pouvez ajouter cette ligne afin de voir comment le masque fonctionne let superlayerPath = UIBezierPath.init (ovalIn: blurView.frame) –

+0

Merci beaucoup. Maintenant, je veux ajouter de l'ombre sur cette zone découpée.Comment est-ce possible.please help moi. @VitalyMigunov –