Ios 将CAGradientLayer用于角度/圆渐变

Ios 将CAGradientLayer用于角度/圆渐变,ios,core-animation,gradient,geometry,cagradientlayer,Ios,Core Animation,Gradient,Geometry,Cagradientlayer,如何使用CAGradientLayer以最有效的方式围绕圆/角度绘制渐变 我用这个做了下面的那个。它使用位图上下文进行绘制,但是CAGradientLayer会更有效 不幸的是,我只能用它来制作线性渐变 渐变层当前仅支持线性渐变。但是,如果查看渐变层的界面,它包含一个类型属性。目前定义的唯一类型是kCAGradientLayerAxial(线性) 存在类型属性的事实表明,苹果将在未来某个日期添加更多类型,而径向渐变似乎是一个非常类似的添加 您可以考虑创建自己的CAGradientLayer自定义

如何使用CAGradientLayer以最有效的方式围绕圆/角度绘制渐变

我用这个做了下面的那个。它使用位图上下文进行绘制,但是CAGradientLayer会更有效

不幸的是,我只能用它来制作线性渐变


渐变层当前仅支持线性渐变。但是,如果查看渐变层的界面,它包含一个类型属性。目前定义的唯一类型是kCAGradientLayerAxial(线性)

存在类型属性的事实表明,苹果将在未来某个日期添加更多类型,而径向渐变似乎是一个非常类似的添加


您可以考虑创建自己的CAGradientLayer自定义子类,该类可以绘制径向渐变和线性渐变。我在网上看到过创建自定义CALayer子类的演示项目。

我意识到这个问题已经问了很多年了,但是对于现在偶然发现它的人来说,iOS 12添加了一个圆锥渐变类型,使这成为可能

gradientLayer.type = CAGradientLayerType.conic
gradientLayer.frame = bounds
gradientLayer.colors = [startColor.cgColor, endColor.cgColor]
gradientLayer.startPoint = CGPoint(x: 0.5, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 0.5, y: 0)

嘿,谢谢你的回复,是的,我上面链接的项目创建了CALayer的一个子类来渲染我上面显示的角度梯度。不幸的是,这是相当缓慢的,因为它绘制的是CGBitmapContext。不幸的是,kCAGradientLayerAxial是自引入以来唯一受支持的渐变类型。因此,尽管我们可以假设在某个时候会增加对其他类型渐变的支持,但我认为这不会很快发生。Core Graphics有CGContextDrawRadialGradient方法。是时候实现CAGradientLayer的自定义子类了,它支持您自己的渐变类型。您可以实现drawInContext:并调用CGContextDrawRadialGradient。它应该只需要几行代码和层上的一些额外属性就可以实现。圆锥曲线,又名,草图中的角度梯度。最后,苹果支持它。