ios - 将我的渐变设置为 BezierPath 的弧线

标签 ios swift uibezierpath

我读过一些主题,但不适用于我...我尝试将渐变颜色应用于用 UIBezierPath 绘制的弧线。 问题是我的渐变填充了整个圆而不仅仅是圆环。

func layerWith(size: CGSize, color: UIColor) -> CALayer {
    let layer: CAShapeLayer = CAShapeLayer()
    var path: UIBezierPath = UIBezierPath()
    let lineWidth: CGFloat = 2

    layer.backgroundColor = nil
    layer.path = path.cgPath
    layer.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)


    switch self {
    case .ring:
        path.addArc(withCenter: CGPoint(x: size.width / 2, y: size.height / 2),
                    radius: size.width / 2,
                    startAngle: 0,
                    endAngle: CGFloat(2 * M_PI),
                    clockwise: false);

        layer.fillColor =  UIColor.clear.cgColor
        layer.strokeColor = color.cgColor
        layer.lineWidth = lineWidth

        let colorGradStart  = UIColor(red: 0/255, green: 209/255, blue: 192/255, alpha: 1.0)
        let colorGradEnd = UIColor(red: 00/255, green: 99/255, blue: 91/255, alpha: 1.0)

        let gradient = CAGradientLayer()
        gradient.frame = path.bounds
        gradient.colors = [colorGradStart.cgColor, colorGradEnd.cgColor]

        let shapeMask = CAShapeLayer()
        shapeMask.path = path.cgPath
        gradient.mask = shapeMask


        layer.addSublayer(gradient)
    }
    return layer
}

所以这段代码,将渐变应用于所有填充的表单,我只需要弧线。

最佳答案

一种方法是将 CAShapeLayer 作为 mask 应用到渐变层。然后它会显示渐变。

关于ios - 将我的渐变设置为 BezierPath 的弧线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42901999/

相关文章:

c# - Xamarin iOS 同步运行具有返回值的任务

ios - 使用自定义 setter 或 KVO

ios - 核心数据在更新应用程序时创建额外的空存储

iOS RxSwift 如何将核心蓝牙连接到 Rx 序列?

iOS Outline of Stroked UIBezierPath/CGPath,作为路径

ios - UIBezierPath 和 applytransform

iphone - iOS - 将我的日期变成超链接

swift - 为什么我不能在将数据写入 Firebase 数据库时执行 segue?

swift - 谁的 View 仅在首次启动时不在窗口层次结构中

swift - 为自定义 UIView 添加渐变颜色