您的位置:首页 > 其它

CAGradientLayer

2014-07-08 15:07 176 查看
参考此处:http://www.cnblogs.com/YouXianMing/p/3793913.html#2977749

CAGradientLayer用一个简单的线性渐变覆盖它的背景。渐变定义和Core Graphic中的渐变一样,一个位置数组和一个对应的颜色数组,以及一个开始点和结束点。为了剪裁渐变,可以把一个遮罩(mask)添加到CAGradientLayer中。

Colors数组需要CGColor,不是UIColor。但是CGColorRef不是一个对象类型,而NSArray需要对象,所以为了通过编译,可能需要类型转换(为id),至少对数组的第一项进行转换。

self.view.backgroundColor = [UIColor blackColor];

colorLayer = [CAGradientLayer layer];
colorLayer.backgroundColor = [UIColor blueColor].CGColor;
colorLayer.frame    = (CGRect){CGPointZero, CGSizeMake(200, 200)};
colorLayer.position = self.view.center;
[self.view.layer addSublayer:colorLayer];

// 颜色分配
colorLayer.colors = @[(__bridge id)[UIColor redColor].CGColor,
(__bridge id)[UIColor whiteColor].CGColor,
(__bridge id)[UIColor redColor].CGColor];
colorLayer.locations  = @[@(-0.2), @(-0.1), @(0)];

// 起始点
colorLayer.startPoint = CGPointMake(0, 0);

// 结束点
colorLayer.endPoint   = CGPointMake(1, 0);

CAShapeLayer *circle = [ViewController LayerWithCircleCenter:CGPointMake(102, 100)
radius:80
startAngle:DEGREES(0)
endAngle:DEGREES(360)
clockwise:YES
lineDashPattern:nil];
circle.strokeColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:circle];
circle.strokeEnd = 1.f;
colorLayer.mask = circle;

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];
[timer fire];

- (void)timerMethod
{
static int i = 0;
if (i++ % 2 == 0)
{
CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"locations"];
fadeAnim.fromValue = @[@(-0.2), @(-0.1), @(0)];
fadeAnim.toValue   = @[@(1.0), @(1.1), @(1.2)];
fadeAnim.duration  = 1.5;
[colorLayer addAnimation:fadeAnim forKey:nil];
}
}




补充:

CALayer Animation - Gradient Animation

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CAGradientLayer 渐变