如何更改CAGradientLayer色点?

时间:2013-12-04 22:51:07

标签: ios core-animation cagradientlayer

现在我有一个GA Gradient图层,我设置颜色,但我想将颜色点设置为(而不是顶部中心,左上角)和底部(而不是底部中心)到右下角)只是为了改变一点。思考?下面是我到目前为止的代码......我包含核心动画,因为我是颜色之间的动画。

- (id)init {
    self = [super init];

    UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.w, self.h)];
    [self addSubview:gradientView];
    [self sendSubviewToBack:gradientView];

    topColor = [UIColor colorWithRed:0.012 green:0.012 blue:0.012 alpha:1];
    bottomColor = [UIColor colorWithRed:1.000 green:0.765 blue:0.235 alpha:1];

    gradient = [CAGradientLayer layer];
    gradient.frame = gradientView.frame;
    gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
    gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];
    [gradientView.layer addSublayer:gradient];

    [self performSelector:@selector(animateColors) withObject:self afterDelay:2.0];
    currentColorCount = 1;
    return self;
}

在左边(我有什么)左边(我想要的)

On the right (What I've got) on the left (what I'd like)

1 个答案:

答案 0 :(得分:103)

startPoint的{​​{1}}和endPoint属性在“单位坐标系”中定义。在单位坐标系中:

  • CAGradientLayer对应于图层边界矩形的最小坐标,在iOS上是左上角,除非图层已经变换;
  • (0,0)对应于图层边界矩形的最大坐标,除非图层已经变换,否则在iOS上是右下角。

因此,按照您想要的方式安排渐变应该很简单:

(1,1)