[英]UIVisualEffectView mask on iOS 10
我有一个UIVisualEffectView
和一个我希望查看其形状的形状( CGPath
)。
我听说掩盖UIVisualEffectView
会做到这一点。
这就是我所做的( PocketSVG
是一个帮助您将SVG
文件转换为CGPath
的API)。 码:
let blur: UIBlurEffect = UIBlurEffect(style: .Light)
let ev: UIVisualEffectView = UIVisualEffectView(effect: blur)
ev.frame = self.frame
ev.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(ev)
ev.rightAnchor.constraintEqualToAnchor(self.rightAnchor).active = true
ev.bottomAnchor.constraintEqualToAnchor(self.bottomAnchor).active = true
ev.leftAnchor.constraintEqualToAnchor(self.leftAnchor).active = true
ev.heightAnchor.constraintEqualToAnchor(self.heightAnchor, multiplier: 1.5).active = true
let myPath: CGPathRef = PocketSVG.pathFromSVGFileNamed("CategoriesBar").takeUnretainedValue()
var transform: CGAffineTransform = CGAffineTransformMakeScale(self.frame.size.width / 754.0, self.frame.size.height / 220.0)
let transformedPath: CGPathRef = CGPathCreateMutableCopyByTransformingPath(myPath, &transform)!
let maskLayer = CAShapeLayer()
maskLayer.path = transformedPath
maskLayer.fillRule = kCAFillRuleEvenOdd
let maskView = UIView(frame: self.frame)
maskView.backgroundColor = UIColor.blackColor()
maskView.layer.mask = maskLayer
ev.maskView = maskView
它在iOS 9
及更低版本上运行良好,但它不适用于iOS 10
和Xcode 8
(没有模糊,只有透明视图)。
如果有人想尝试,这里是我的SVG
文件的链接:
https://www.dropbox.com/s/mjql2bzf37vpl2r/CategoriesBar.svg?dl=0
知道如何才能让它在iOS 10
?
谢谢!
在iOS 10 / Xcode 8中使用layer.mask时,遗憾的是重新屏蔽了VisualEffectViews。 我发现,在接受的答案代码示例这里 应该为你工作......这似乎只能由斯威夫特3语法从您的代码不同(据我可以看到)。 值得双重检查代码事件的顺序和您正在使用的语法,但是,为了确保您没有遗漏任何东西。
let maskLayer = CAShapeLayer()
maskLayer.path = path.cgPath
maskLayer.fillRule = kCAFillRuleEvenOdd
let borderLayer = CAShapeLayer()
borderLayer.path = circle.cgPath
borderLayer.strokeColor = UIColor.white.cgColor
borderLayer.fillColor = UIColor.clear.cgColor //Remember this line, it caused me some issues
borderLayer.lineWidth = 10
let maskView = UIView(frame: self.view.frame)
maskView.backgroundColor = UIColor.black
maskView.layer.mask = maskLayer
blur.layer.addSublayer(borderLayer)
blur.mask = maskView
您还可以在创建蒙版后尝试使用setNeedsDisplay()
和layoutIfNeeded()
强制进行视图布局。 请参阅8月4日flainez在苹果开发人员论坛上关于此主题的评论,他说这解决了显示屏蔽的VisualEffectView的问题。
上面的链接线程也广泛讨论了这个问题,代码示例以及Apple员工的反馈和建议,“Rincewind”正在解决这个问题。 如果你还在努力解决这个问题,我建议你仔细阅读。 我认为整体共识是该问题可以解决蒙面VisualEffectsViews,但对于在视图之间转换期间尝试使用蒙版VisualEffectsViews的开发人员来说无法解析。
您还可以查看2015年WWDC视频,了解UIVisualEffectView。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.