Я построил вид только с двумя верхними углами, которые имеют угловой радиус, и двумя нижними, которые являются нормальными углами в 90 градусов:
extension UIView {
func roundCorners(corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
layer.mask = mask
}
}
Я добавляю это к своему виду, просто выполнив:
override func layoutSubviews() {
super.layoutSubviews()
roundCorners(corners: [.topLeft, .topRight], radius: 15)
}
Теперь я хочу добавить тень к нему, и я попытался сделать следующее:
private var shadowLayer: CAShapeLayer!
override func layoutSubviews() {
super.layoutSubviews()
let corners: UIRectCorner = [.topLeft, .topRight]
let radius: CGFloat = 15
roundCorners(corners: corners, radius: radius)
if shadowLayer == nil {
shadowLayer = CAShapeLayer()
shadowLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)).cgPath
shadowLayer.fillColor = UIColor.white.cgColor
shadowLayer.shadowColor = UIColor.darkGray.cgColor
shadowLayer.shadowPath = shadowLayer.path
shadowLayer.shadowOffset = CGSize(width: 2.0, height: 2.0)
shadowLayer.shadowOpacity = 0.3
shadowLayer.shadowRadius = 2
layer.insertSublayer(shadowLayer, at: 0)
}
}
Но это не работает (тень вообще не появляется) Как я могу это исправить?
Спасибо