创建带透明孔的CAGradient图层?

时间:2017-11-24 07:35:17

标签: ios swift calayer

目前我这样做:

final class BorderedButton: BottomNavigationButton {

private let gradient = CAGradientLayer()
private let shapeLayer = CAShapeLayer()

override func layoutSubviews() {
    super.layoutSubviews()

    let radius = bounds.size.height / 2
    let outside = UIBezierPath(roundedRect: CGRect(x: 0.0, y: 0.0, width: bounds.width, height: bounds.height), cornerRadius: radius)
    let inside = UIBezierPath(roundedRect: CGRect(x: 3.0, y: 3.0, width: bounds.width - 6, height: bounds.height - 6), cornerRadius: radius - 3)
    outside.append(inside)
    outside.usesEvenOddFillRule = true
    shapeLayer.path = outside.cgPath
}

init(color: UIColor?) {
    super.init(frame: .zero)

    let isGradient = color == nil

    shapeLayer.fillRule = kCAFillRuleEvenOdd
    shapeLayer.fillColor = UIColor.red.cgColor
    layer.insertSublayer(shapeLayer, at: 0)
    //gradient part
    gradient.colors = isGradient ? [Constants.gradientStart, Constants.gradientEnd] : [color!.cgColor, color!.cgColor]
    gradient.startPoint = CGPoint(x: 0.2, y: 0.5)
    gradient.endPoint = CGPoint(x: 1, y: 1)
}
}

如何将该渐变应用于我的代码?

1 个答案:

答案 0 :(得分:2)

不要将CAShapeLayer添加到视图layer,而是将其设置为mask的{​​{1}}。另外,不要忘记设置渐变图层的边界。

我必须做一些修改才能让它在游乐场中运行,但这对我有用:

CAGradientLayer