如何设置UIView的蒙版,包括圆角、边框和阴影?

3
我希望实现的目标是为UIView应用遮罩,同时添加shadowbordercornerRadius。到目前为止,我已经能够设置maskcornerRadiusborder,但问题在于尝试设置shadow时出现了问题。
以下是我的代码:
let path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: radius, height: radius))

let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask

let frameLayer = CAShapeLayer()
frameLayer.path = path.cgPath
frameLayer.lineWidth = width
frameLayer.strokeColor = color.cgColor
frameLayer.fillColor = nil

layer.addSublayer(frameLayer)

问题在于,如果我尝试将shadow设置为frameLayer或layer,我得不到预期的结果。它会被遮罩裁剪。除了使用下一行代码之外,是否有其他方法可以实现这个效果?
layer.cornerRadius = 5
layer.borderColor = color.cgColor
layer.borderWidth = width
layer.shadowColor = shadowColor.cgColor
layer.shadowOpacity = opacity
layer.shadowRadius = radius
layer.shadowOffset = offset
clipsToBounds = true

这两个片段都是用于在UIView子类中使用的,如果有人能够帮助我解决这个问题,我将不胜感激。谢谢。

如果需要其他信息或有不清楚的地方,请告诉我。


如何在UIView上添加圆角和阴影? - Larme
@Larme 这不是我需要的答案,我在问关于遮罩层、阴影、边框和圆角的问题。请仔细阅读问题。 - Baki
你能否添加你自定义 UIView 的完整代码?@Baki - Reinier Melian
1个回答

1

嘿,只用半个小时我就找到了解决自己问题的方法:

let path = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: radius, height: radius))

let frameLayer = CAShapeLayer()
frameLayer.path = path.cgPath
frameLayer.shadowPath = path.cgPath

frameLayer.lineWidth = borderWidth
frameLayer.strokeColor = borderColor.cgColor
frameLayer.fillColor = backgroundColor?.cgColor
frameLayer.shadowOffset = shadowOffset
frameLayer.shadowOpacity = shadowOpacity
frameLayer.shadowRadius = shadowRadius
frameLayer.shadowColor = shadowColor.cgColor

layer.mask = frameLayer
layer.insertSublayer(frameLayer, at: 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接