iOS10 UIView带阴影效果的模糊效果
问题描述:
如何在UIView带有阴影效果的模糊效果?如果我做的:iOS10 UIView带阴影效果的模糊效果
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let layer = self.view.layer;
layer.shadowColor = UIColor.black.cgColor
layer.shadowOpacity = 1.0
layer.shadowOffset = CGSize(width: 0.0, height: 0.5)
layer.shadowRadius = 5.0
self.view.backgroundColor = UIColor.clear
let blurEffect = UIBlurEffect(style: .light)
let sideEffectView = UIVisualEffectView(effect: blurEffect)
sideEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
sideEffectView.frame = self.view.bounds;
self.view.addSubview(sideEffectView)
}
有一个阴影,但没有模糊效果,如果我这样做:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.view.backgroundColor = UIColor.clear
let blurEffect = UIBlurEffect(style: .light)
let sideEffectView = UIVisualEffectView(effect: blurEffect)
sideEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
sideEffectView.frame = self.view.bounds;
self.view.addSubview(sideEffectView)
}
有一个模糊的效果,但没有影子。
感谢您的帮助!
答
谢谢回答。我还找到了另一个解决方案随着你的,它不是一个真正的影子(无半径...):
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.clear
let blurEffect = UIBlurEffect(style: .light)
let sideEffectView = UIVisualEffectView(effect: blurEffect)
sideEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
sideEffectView.frame = self.view.bounds
self.view.addSubview(sideEffectView)
let shadowView = UIView(frame: CGRect(x: 0.0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
shadowView.translatesAutoresizingMaskIntoConstraints = false
shadowView.backgroundColor = UIColor.white
shadowView.layer.masksToBounds = false
shadowView.layer.shadowOffset = CGSize(width: 2.5, height: 2.5)
shadowView.layer.shadowOpacity = 1.0
shadowView.layer.shadowRadius = 2.5
self.view.insertSubview(shadowView, at: 0)
// Set constraints programmatically, as this view is animatable
NSLayoutConstraint(item: shadowView, attribute: NSLayoutAttribute.trailing, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.trailingMargin, multiplier: 1.0, constant: 0.0).isActive = true
NSLayoutConstraint(item: shadowView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.topMargin, multiplier: 1.0, constant: 0.0).isActive = true
NSLayoutConstraint(item: shadowView, attribute: NSLayoutAttribute.bottom, relatedBy: NSLayoutRelation.equal, toItem: view, attribute: NSLayoutAttribute.bottomMargin, multiplier: 1.0, constant: 0.0).isActive = true
NSLayoutConstraint(item: shadowView, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1.0, constant: 5.0).isActive = true
}
答
我已经偶然发现了与你同样的问题。无法与阴影添加一个layer
,所以使出了增加额外的UIView
到UIVisualEffectsView
的contentView
是有异曲同工之妙:
let borderViewFrame = CGRect(x: 0, y: bounds.maxY, width: bounds.width, height: 0.5)
let borderView = UIView(frame: borderViewFrame)
borderView.backgroundColor = UIColor.black.withAlphaComponent(0.25)
contentView.clipsToBounds = false
contentView.addSubview(borderView)
是啊,可惜你是对的。我只需要复制导航栏的投影/边框,并且该解决方案足够好。你当然应该把你的答案标记为正确的,那就是SO上的鼓励行为。 –