Нарисуйте дыру на UIBlurEffect
Xcode 8.0 - Swift 2.3
У меня есть внутреннее расширение для создания размытия слоя, который прекрасно работает:
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
}
}
Вопрос: как я могу добавить фасонное отверстие в оверлейной смазке? Я сделал много попыток:
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)
но результат таков:
Я не могу понять, почему дыра в порядке наUIVisualEffectView
но не в_UIVisualEffectBackdropView
Я пробовал решение @Arun (с UIBlurEffectStyle.Dark), но результат не тот же:
ОБНОВЛЕНИЕ 2С решением @ Dim_ov у меня есть:
Чтобы сделать эту работу мне нужно спрятаться_UIVisualEffectBackdropView
в этом случае:
for v in effect.subviews {
if let filterView = NSClassFromString("_UIVisualEffectBackdropView") {
if v.isKindOfClass(filterView) {
v.hidden = true
}
}
}