【问题标题】:CAGradientLayer radial gradientCAGradientLayer 径向渐变
【发布时间】: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);

但它不起作用。

谢谢。

【问题讨论】:

    标签: objective-c uiview cagradientlayer


    【解决方案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的坐标。

    【讨论】:

    • 每当我尝试这样做时,我都会在模拟器运行时得到一个非常“条纹”的怪异渐变。然而,当我进行快照测试时,它看起来还不错。 :(
    • 我的代码好像不能贴在这里它。
    【解决方案2】:

    你不能初始化radial CAGradientLayer,但是你可以很容易地修改当前图层样式为radial

    layer.type = .radial
    

    【讨论】:

      【解决方案3】:

      更新:

      似乎是这样,其他答案显示了方法。


      很遗憾,CAGradientLayer 不支持径向渐变。唯一的方法是继承CALayer 并自己绘制。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多