CAGradientLayer径向渐变

4
我使用以下代码来设置渐变颜色:
NSArray *locations = @[@0.0, @0.1f];

CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;

如何制作径向渐变色?

我认为我需要改变位置,但我没有猜到正确的位置。此外,我尝试了以下方法:

headerLayer.anchorPoint = CGPointMake(0.5, 1.0);

但是它不起作用。 谢谢。
3个回答

17

截止2019年,被接受的答案是错误的。您可以通过将径向渐变的类型属性设置为.radial来创建一个径向渐变。

重要的一点是,起点是椭圆或圆的中心坐标,而终点是外部椭圆或圆的尺寸。所有坐标都必须以基于单位的方式表示(即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的坐标而放置在框架之外。

enter image description here


每当我尝试这样做时,模拟器在运行时会出现非常“条纹状”的奇怪渐变。 但是,当我进行快照测试时,在快照上它看起来很好。 :( - Charlotte1993
看起来我无法在这里粘贴我的代码 :( 根据 stack overflow 的说法,代码太长了 :( 我正在创建一个 stack overflow 的问题,当我发布它时,我会在这里粘贴链接。 - Charlotte1993
https://dev59.com/sLbna4cB1Zd3GeqPX0Bj - Charlotte1993
在这个例子中,"radius"这个词并不准确。如果我们希望代码真正将其视为半径,最后一行需要替换为: let edgeLen = sqrt((radius*radius)/2.0); g.endPoint = CGPoint(x: center.x + edgeLen, y: center.y + edgeLen) - TyR

1

你无法初始化径向CAGradientLayer,但是你可以轻松地修改当前图层样式为径向。

layer.type = .radial

-3

更新:

看起来它确实可以,其他答案展示了方法。


很遗憾,CAGradientLayer 不支持径向渐变。唯一的方法是子类化 CALayer 并自己进行绘制。

我已经在这里回答了这个问题,但由于这是一个较旧的问题,另一个可能是重复的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接