CAGradientLayer 径向渐变
Posted
技术标签:
【中文标题】CAGradientLayer 径向渐变【英文标题】:CAGradientLayer radial gradient 【发布时间】:2014-04-18 13:53:33 【问题描述】:我使用以下代码设置渐变色:
NSArray *locations = @[@0.0, @0.1f];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
如何制作径向渐变色?
我想我必须更改位置,但我没有猜到正确的位置。另外,我试过这个:
headerLayer.anchorPoint = CGPointMake(0.5, 1.0);
但它不起作用。
谢谢。
【问题讨论】:
【参考方案1】:到 2019 年,接受的答案是错误的,您可以通过将其 type 属性设置为 .radial 来制作径向渐变。 重要的是 startPoint 是椭圆或圆的中心的坐标,endPoint 是外日食或圆的尺寸。所有坐标都必须以单位表示(又名 1.0 是 100%)。
以下 Swift 示例将绘制一个位于框架中心的椭圆,并设置与框架匹配的半径:
let g = CAGradientLayer()
// We want a radial gradient
g.type = .radial
g.colors = [UIColor.clear.cgColor, UIColor.black.cgColor]
let center = CGPoint(x: 0.5, y: 0.5)
g.startPoint = center
let radius = 1.5
g.endPoint = CGPoint(x: radius, y: radius)
例如,上面的示例可用于向视图添加小插图(参见图片)。
注意半径可以大于边框,中心也可以放在边框外,通过指定大于1或小于-1的坐标。
【讨论】:
每当我尝试这样做时,我都会在模拟器运行时得到一个非常“条纹”的怪异渐变。然而,当我进行快照测试时,它看起来还不错。 :( 我的代码好像不能贴在这里它。 ***.com/questions/57889427/…【参考方案2】:你不能初始化radial CAGradientLayer,但是你可以很容易地修改当前图层样式为radial
layer.type = .radial
【讨论】:
【参考方案3】:更新:
似乎是这样,其他答案显示了方法。
很遗憾,CAGradientLayer
不支持径向渐变。唯一的方法是继承CALayer
并自己绘制。
我已经回答了here 的问题,但由于这是一个较老的问题,另一个问题可能是重复的。
【讨论】:
以上是关于CAGradientLayer 径向渐变的主要内容,如果未能解决你的问题,请参考以下文章