阴影仅在左侧和上侧蒙版。是什么原因造成的?

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

我正在尝试实现一种允许向透明按钮添加阴影的功能。为此,我正在创建一个遮罩视图内部阴影的层。但是,我的阴影在左侧和上部被剪切,但在右侧和下部没有被剪切。

这里是它的外观(这不是一个透明的按钮,但是除了像这样剪切阴影之外,它们也可以正常工作。):

enter image description here

这是实现此目的的代码:

private func applyShadow() {
    layer.masksToBounds = false

    if shouldApplyShadow && shadowLayer == nil {
        shadowLayer = CAShapeLayer()

        let shapePath = CGPath(roundedRect: bounds, cornerWidth: cornerRadi, cornerHeight: cornerRadi, transform: nil)

        shadowLayer.path = shapePath
        shadowLayer.fillColor = backgroundColor?.cgColor
        shadowLayer.shadowPath = shadowLayer.path
        shadowLayer.shadowRadius = shadowRadius ?? 8
        shadowLayer.shadowColor = (shadowColor ?? .black).cgColor
        shadowLayer.shadowOffset = shadowOffset ?? CGSize(width: 0, height: 0)
        shadowLayer.shadowOpacity = shadowOpacity ?? 0.8

        layer.insertSublayer(shadowLayer!, at: 0)

        /// If there's background color, there is no need to mask inner shadows.
        if backgroundColor != .none && !(innerShadows ?? false) {
            let maskLayer = CAShapeLayer()
            maskLayer.path = { () -> UIBezierPath in
                let path = UIBezierPath()
                path.append(UIBezierPath(cgPath: shapePath))
                path.append(UIBezierPath(rect: UIScreen.main.bounds))
                path.usesEvenOddFillRule = true
                return path
            }().cgPath

            maskLayer.fillRule = .evenOdd
            shadowLayer.mask = maskLayer
        }
    }
}

我认为这与奇偶填充规则算法有关,我不确定。但是我该如何克服这种剪裁问题呢?

提前感谢。

ios swift xcode core-graphics calayer
1个回答
0
投票

尝试更改shadowOffset

    shadowLayer.shadowOffset = shadowOffset ?? CGSize(width: -8, height: 0)
© www.soinside.com 2019 - 2024. All rights reserved.