UIView Shadow Gradient

cal*_*ley 16 gradient shadow uiview ios swift

我在我的iOS项目中创建了一个自定义UIView,它有一个投影.我的目标是将相同的渐变应用于阴影,就像在视图的背景上一样.

下面是我当前纯色阴影的外观示例.

影子示例 这是通过UIView的子类完成的,代码如下:

override func layoutSubviews() {
    let gradientLayer = layer as! CAGradientLayer
    gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
    gradientLayer.startPoint = CGPoint(x: startPointX, y: startPointY)
    gradientLayer.endPoint = CGPoint(x: endPointX, y: endPointY)
    layer.cornerRadius = cornerRadius
    layer.shadowColor = shadowColor.cgColor
    layer.shadowOffset = CGSize(width: shadowX, height: shadowY)
    layer.shadowRadius = shadowBlur
    layer.shadowOpacity = 1

    let inset: CGFloat = bounds.width * 0.05
    layer.shadowPath = UIBezierPath(roundedRect: bounds.insetBy(dx: inset, dy: 0.0), cornerRadius: cornerRadius).cgPath
}
Run Code Online (Sandbox Code Playgroud)

我一直在玩创建第二个渐变层并将其遮盖到阴影中,但没有运气.请指出我正确的方向!

Jac*_*zik 4

我认为你不能用标准 CALayer 阴影做更多的事情。看一下CALayer 的过滤器属性。

https://developer.apple.com/documentation/quartzcore/calayer/1410901-filters

例如,创建第二个CAGradientLayer并应用GausianBlur滤镜。

https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIGaussianBlur

禁用标准图层阴影并将模糊图层添加为子图层。