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 径向渐变的主要内容,如果未能解决你的问题,请参考以下文章

圆形 CAGradientLayer 蒙版

如何在Objective C中使径向渐变在视图中间淡化

突出显示时更改 UIButton 的背景颜色

CSS3 渐变 — 径向渐变

swift渐变之CAGradientLayer

CAGradientLayer 没有正确绘制渐变