添加阴影以仅具有两个半径的角的视图

问题描述 投票:0回答:1

[我仅用两个具有拐角半径的上角和两个成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)
    }
}

但是这似乎不起作用(阴影根本没有出现)我怎样才能解决这个问题?

谢谢

swift uikit rounded-corners cashapelayer cgpath
1个回答
0
投票
我找到的解决方案:

private var shadowLayer: CAShapeLayer! override func layoutSubviews() { super.layoutSubviews() self.backgroundColor = .clear self.layer.masksToBounds = false let radius: CGFloat = 30 if shadowLayer == nil { shadowLayer = CAShapeLayer() shadowLayer.path = UIBezierPath(roundedRect: bounds, byRoundingCorners: [.topLeft , .topRight], cornerRadii: CGSize(width: radius, height: radius)).cgPath // shadowLayer.path = UIBezierPath(roundedRect: CGRect(x: bounds.origin.x, y: bounds.origin.y, width: bounds.width, height: bounds.height), byRoundingCorners: [.topLeft , .topRight], cornerRadii: CGSize(width: radius, height: radius)).cgPath // To change the shadow shape shadowLayer.fillColor = UIColor.white.cgColor shadowLayer.shadowColor = UIColor.lightGray.cgColor shadowLayer.shadowPath = shadowLayer.path shadowLayer.shadowOffset = CGSize(width: 0, height: -2.0) shadowLayer.shadowOpacity = 0.1 shadowLayer.shadowRadius = 4 layer.insertSublayer(shadowLayer, at: 0) } }

不幸的是,这仅隐藏了顶角,但是如果“视图”是一个按钮,它们仍然可以单击。
© www.soinside.com 2019 - 2024. All rights reserved.