Draw hole on UIBlurEffect

Xcode 8.0 - Swift 2.3
Ich habe eine interne Erweiterung zum Erstellen einer Weichzeichnungsebene, die hervorragend funktioniert:

internal extension UIView {

    /**
     Add and display on current view a blur effect.
     */
    internal func addBlurEffect(style style: UIBlurEffectStyle = .ExtraLight, atPosition position: Int = -1) -> UIView {
        // Blur Effect
        let blurEffectView = self.createBlurEffect(style: style)
        if position >= 0 {
            self.insertSubview(blurEffectView, atIndex: position)
        } else {
            self.addSubview(blurEffectView)
        }
        return blurEffectView
    }

    internal func createBlurEffect(style style: UIBlurEffectStyle = .ExtraLight) -> UIView {
        let blurEffect = UIBlurEffect(style: style)
        let blurEffectView = UIVisualEffectView(effect: blurEffect)
        blurEffectView.frame = self.bounds
        blurEffectView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
        return blurEffectView
    }

}

Frage ist: Wie kann ich ein geformtes Loch in die Unschärfe-Überlagerung einfügen? Ich habe viele Versuche gemacht:

let p = UIBezierPath(roundedRect: CGRectMake(0.0, 0.0, self.viewBlur!.frame.width, self.viewBlur!.frame.height), cornerRadius: 0.0)
p.usesEvenOddFillRule = true
let f = CAShapeLayer()
f.fillColor = UIColor.redColor().CGColor
f.opacity = 0.5
f.fillRule = kCAFillRuleEvenOdd
p.appendPath(self.holePath)
f.path = p.CGPath
self.viewBlur!.layer.addSublayer(f)

aber Ergebnis ist:

Ich kann nicht verstehen, warum Loch auf @ ok iUIVisualEffectView aber nicht in_UIVisualEffectBackdropView

AKTUALISIERE

Ich habe versucht, @Arun-Lösung (mit UIBlurEffectStyle.Dark), aber das Ergebnis ist nicht dasselbe:

UPDATE 2

Mit @ Dim_ovs Lösung habe ich:

Um diese Arbeit zu machen, muss ich @ versteck_UIVisualEffectBackdropViewauf diese Weise

    for v in effect.subviews {
        if let filterView = NSClassFromString("_UIVisualEffectBackdropView") {
            if v.isKindOfClass(filterView) {
                v.hidden = true
            }
        }
    }

Antworten auf die Frage(6)

Ihre Antwort auf die Frage