使用swift在UIView上添加阴影3

事先迅速3我是在我的UIView像这样添加阴影:

//toolbar is an UIToolbar (UIView) toolbar.layer.masksToBounds = false toolbar.layer.shadowOffset = CGSize(width: -1, height: 1) toolbar.layer.shadowRadius = 1 toolbar.layer.shadowOpacity = 0.5 

但上面的代码不是在swift 3中工作的,而是我的整个View的颜色变成了丑陋的灰色

任何人都知道我们怎样才能快速添加阴影3?

代码片段:

 extension UIView { // OUTPUT 1 func dropShadow(scale: Bool = true) { self.layer.masksToBounds = false self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.5 self.layer.shadowOffset = CGSize(width: -1, height: 1) self.layer.shadowRadius = 1 self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = scale ? UIScreen.main.scale : 1 } // OUTPUT 2 func dropShadow(color: UIColor, opacity: Float = 0.5, offSet: CGSize, radius: CGFloat = 1, scale: Bool = true) { self.layer.masksToBounds = false self.layer.shadowColor = color.cgColor self.layer.shadowOpacity = opacity self.layer.shadowOffset = offSet self.layer.shadowRadius = radius self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = scale ? UIScreen.main.scale : 1 } } 

注意 :如果您没有传递任何参数到该函数,则默认情况下,scale参数将为true。 您可以通过在该参数的types之后为该参数分配值来为函数中的任何参数定义默认值。 如果定义了默认值,那么调用该函数时可以省略该参数。

输出1:

 shadowView.dropShadow() 

在这里输入图像说明

输出2:

 shadowView.dropShadow(color: .red, opacity: 1, offSet: CGSize(width: -1, height: 1), radius: 3, scale: true) 

在这里输入图像说明

我想添加一个选定的答案行!

当我们栅格化图层时,需要将视网膜显示设置为2.0。 否则标签上的文字或图像将是模糊的。 所以我们还需要添加rasterizationScale

  extension UIView { func dropShadow() { self.layer.masksToBounds = false self.layer.shadowColor = UIColor.black.cgColor self.layer.shadowOpacity = 0.5 self.layer.shadowOffset = CGSize(width: -1, height: 1) self.layer.shadowRadius = 1 self.layer.shadowPath = UIBezierPath(rect: self.bounds).cgPath self.layer.shouldRasterize = true self.layer.rasterizationScale = UIScreen.main.scale } }