【问题标题】:CAGradientLayer is not getting the shapeCAGradientLayer 没有得到形状
【发布时间】:2017-12-21 13:07:23
【问题描述】:

我正在创建一个马蹄形的 CAGradientLayer。它似乎没有走这条路,它只是画了一个带阴影的正方形。我错过了什么?

let gradientLayerContainer = CAShapeLayer()
        let gradient = CAGradientLayer()
        let segmentGradientPath = UIBezierPath.horseshoe(
            center: centerPoint,
            innerRadius: (bounds.width / 2) - config.ringWidth,
            outerRadius: bounds.width / 2,
            startAngle: segmentTapped.startAngle,
            endAngle: segmentTapped.endAngle)
        gradientLayerContainer.fillColor = UIColor.clear.cgColor
        gradientLayerContainer.path = segmentGradientPath.cgPath

        let end = centerPoint
        let start = centerPoint.shifted(outerRadius, with: segmentTapped.centerAngle)
        gradient.startPoint = CGPoint(x: start.x / bounds.width, y: start.y / bounds.height)
        gradient.endPoint = CGPoint(x: end.x / bounds.width, y: end.y / bounds.height)
        gradient.colors = [UIColor.white.withAlphaComponent(0.0).cgColor, UIColor.white.cgColor]
        gradient.frame = segmentGradientPath.bounds
        gradient.mask = gradientLayerContainer
        gradient.locations = [0, 1]


        horseshoeLayer.addSublayer(gradientLayerContainer)
        gradientLayerContainer.insertSublayer(gradient, at: 0)

【问题讨论】:

    标签: ios swift gradient shape layer


    【解决方案1】:

    蒙版属于渐变层。渐变层不属于蒙版。此外,在您希望渐变显示的任何地方,遮罩颜色都必须是不透明的(您使用的是相反的 clear)。

    这是正确层次结构的 Playground 示例:

    import PlaygroundSupport
    import UIKit
    
    let rect = CGRect(x: 0, y: 0, width: 300, height: 300)
    let gradient = CAGradientLayer()
    let maskLayer = CAShapeLayer()
    let maskPath = UIBezierPath(ovalIn: rect)
    maskLayer.fillColor = UIColor.black.cgColor
    maskLayer.path = maskPath.cgPath
    gradient.colors = [UIColor.blue.cgColor, UIColor.red.cgColor]
    gradient.mask = maskLayer
    gradient.locations = [0, 1]
    
    let view = UIView(frame: rect)
    view.layer.addSublayer(gradient)
    gradient.frame = view.bounds
    PlaygroundPage.current.liveView = view
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      • 1970-01-01
      • 2014-08-03
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      相关资源
      最近更新 更多