如果设置角半径,则不应用阴影
Posted
技术标签:
【中文标题】如果设置角半径,则不应用阴影【英文标题】:Shadow not being applied if setting corner radius 【发布时间】:2017-07-17 17:48:35 【问题描述】:我正在尝试将角半径添加到bottmLeft 和bottomRight 角,并为其添加阴影。但是由于某种原因,如果我添加那些圆角半径,阴影就会消失。这是什么原因造成的?
这就是我的工作:
我有分机:
extension UIView
func roundCorners(_ corners: UIRectCorner, radius: CGFloat)
self.layoutIfNeeded()
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
应用角:
myView.roundCorners([.bottomLeft, .bottomRight], radius: 35
)
添加阴影扩展:
func addShadow(offset: CGSize, color: UIColor, radius: CGFloat, opacity: Float)
let layer = self.layer
layer.masksToBounds = false
layer.shadowOffset = offset
layer.shadowColor = color.cgColor
layer.shadowRadius = radius
layer.shadowOpacity = opacity
layer.shadowPath = UIBezierPath.init(roundedRect: layer.bounds, cornerRadius: layer.cornerRadius).cgPath
let backgroundCGColor = self.backgroundColor?.cgColor
self.backgroundColor = nil
layer.backgroundColor = backgroundCGColor
并添加阴影:
myView.addShadow(offset: CGSize.init(width: 0.0, height: 10.0) , color: UIColor.blue, radius: 35.0, opacity: 1.0)
为什么添加圆角后阴影消失了?
【问题讨论】:
尝试添加self.clipsToBounds = false 【参考方案1】:myView.layer.shadowPath 需要使用 UIBezierPath 进行初始化。只需给它与 myView 相同的框架和边界即可。
【讨论】:
以上是关于如果设置角半径,则不应用阴影的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIBezierPath 将半径设置为某些角并向自定义 UIButton 添加阴影