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
Ich habe versucht, @Arun-Lösung (mit UIBlurEffectStyle.Dark), aber das Ergebnis ist nicht dasselbe:
UPDATE 2Mit @ Dim_ovs Lösung habe ich:
Um diese Arbeit zu machen, muss ich @ versteck_UIVisualEffectBackdropView
auf diese Weise
for v in effect.subviews {
if let filterView = NSClassFromString("_UIVisualEffectBackdropView") {
if v.isKindOfClass(filterView) {
v.hidden = true
}
}
}