CAGradientLayer渐变颜色动画

CAGradientLayer渐变颜色动画

或许你用过CAGradientLayer,你知道他是用于渐变颜色的,但你是否直到,CAGradientLayer的渐变颜色是可以动画的哦.

源码:


//
// RootViewController.m
// CAGradientLayer
//
// Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "CAShapeLayer+Circle.h"
#import "YXGCD.h"

@interface RootViewController ()

@property (nonatomic, strong) GCDTimer *timer;

@end

@implementation RootViewController

- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];

// 创建形状遮罩
CAShapeLayer *circleLayer = [CAShapeLayer LayerWithCircleCenter:CGPointMake(82, 82)
radius:80
startAngle:DEGREES(0)
endAngle:DEGREES(360)
clockwise:YES
lineDashPattern:@[@5, @5]];
circleLayer.strokeColor = [UIColor blackColor].CGColor; // 边缘线的颜色
circleLayer.lineCap = kCALineCapSquare; // 边缘线的类型
circleLayer.lineWidth = 1.0f; // 线条宽度
circleLayer.strokeStart = 0.0f;
circleLayer.strokeEnd = 1.0f;

// 创建渐变图层
CAGradientLayer *faucet = [CAGradientLayer layer];
faucet.frame = CGRectMake(0, 0, 200, 200);
faucet.position = self.view.center;

// 以CAShapeLayer的形状作为遮罩是实现特定颜色渐变的关键
faucet.mask = circleLayer;
faucet.colors = @[(id)[UIColor greenColor].CGColor,
(id)[UIColor redColor].CGColor,
(id)[UIColor cyanColor].CGColor];

// 设定动画时间
faucet.speed = 0.5f;

// 添加到系统图层中
[self.view.layer addSublayer:faucet];

// 定时器动画事件
_timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
[_timer event:^{
circleLayer.strokeEnd = arc4random() % 100 / 100.f;
faucet.colors = @[(id)[UIColor colorWithRed:arc4random()%255/255.f
green:arc4random()%255/255.f
blue:arc4random()%255/255.f
alpha:1].CGColor,
(id)[UIColor colorWithRed:arc4random()%255/255.f
green:arc4random()%255/255.f
blue:arc4random()%255/255.f
alpha:1].CGColor,
(id)[UIColor colorWithRed:arc4random()%255/255.f
green:arc4random()%255/255.f
blue:arc4random()%255/255.f
alpha:1].CGColor,
(id)[UIColor colorWithRed:arc4random()%255/255.f
green:arc4random()%255/255.f
blue:arc4random()%255/255.f
alpha:1].CGColor,
(id)[UIColor colorWithRed:arc4random()%255/255.f
green:arc4random()%255/255.f
blue:arc4random()%255/255.f
alpha:1].CGColor];
} timeInterval:NSEC_PER_SEC];
[_timer start];
}

@end

效果如下:

以下代码才是核心的地方:

附录:

http://stackoverflow.com/questions/21121670/cagradientlayer-with-cashapelayer-mask-not-showing

CAGradientLayer渐变颜色动画,布布扣,bubuko.com

时间: 2024-12-27 21:16:34

CAGradientLayer渐变颜色动画的相关文章

自定义带有渐变颜色的进度条

在项目中用到了渐变颜色的进度条 样式如下: 1.设置背景色颜色 2.设置边框圆角大小 3.设置渐变的颜色个数 4.设置渐变颜色 5.设置显示,隐藏进度条动画条纹 Demo地址:https://github.com/xqG/gradual-ProgressBar

渐变颜色的进度条WGradientProgress-备用

今天我们来实现一个iOS平台上的进度条(progress bar or progress view).这种进度条比APPLE自带的更加漂亮,更加有“B格”.它拥有渐变的颜色,而且这种颜色是动态移动的,这里称之为WGradientProgress. 先来看看我们的目标长什么样子: WGradientProgress的使用方法很简单,主要有展示接口以及隐藏接口,目前显示的位置有两种选择: WProgressPosDown        //progress is on the down border

iOS 之渐变颜色

效果如下: 实现代码如下: .H #import <UIKit/UIKit.h> /** 渐变方式 - IHGradientChangeDirectionLevel: 水平渐变 - IHGradientChangeDirectionVertical: 竖直渐变 - IHGradientChangeDirectionUpwardDiagonalLine: 向下对角线渐变 - IHGradientChangeDirectionDownDiagonalLine: 向上对角线渐变 */ typedef

iOS为UIView的子类添加渐变颜色

+ (UIColor*) gradientFromColor:(UIColor*)c1 toColor:(UIColor*)c2 withWidth:(CGFloat)width andHeight:(CGFloat)height{ CGSize size = CGSizeMake(width, height); UIGraphicsBeginImageContextWithOptions(size, NO, 0); CGContextRef context = UIGraphicsGetCur

『HTML5梦幻之旅』 - 舞动色彩,Canvas下实现颜色动画

注:为了方便起见,本次开发用到了开源引擎lufylegend,官方地址如下:http://lufylegend.com/lufylegend 今天来学习下HTML5 Canvas颜色动画.什么是颜色动画呢?以我的理解就是以某种颜色过渡到另一种颜色.和这个效果有点类似:http://w3school.com.cn/tiy/t.asp?f=css3_animation1 上面的demo是用css3实现,而我们今天要用的是Canvas.Canvas并没有相关的API,所以要想实现这种效果,只有靠自己了

在C#填充窗体为渐变颜色

protected override void OnPaintBackground(PaintEventArgs e)2  {3   LinearGradientBrush b = new LinearGradientBrush(this.ClientRectangle,4    Color.Blue,Color.AliceBlue,90f); //线性渐变5   e.Graphics.FillRectangle(b,this.ClientRectangle); // 填充窗体6   b.Dis

兼容多种浏览器的渐变颜色背景

经常有一些时候需要使用渐变背景,使用长条图片有点太不高大上了,于是自己写了个小例子,兼容多浏览器就要为每一个浏览器写对应的 CSS,太低版本的浏览器只能使用图片做背景. 下面是当前五大浏览器对 gradient 的支持 Css代码   <style type="text/css" media="screen"> #gradient { width: 200px; height: 200px; /* 如果浏览器不支持渐变,使用图像作为背景 */ backg

css 渐变颜色背景gradient 浏览器兼容

兼容当前五大浏览器的渐变颜色背景gradient的写法<style type="text/css" media="screen"> #gradient { width: 200px; height: 200px; /* 如果浏览器不支持渐变,使用图像作为背景 */ background: url(gradient.jpg); /* Webkit: Safari 4-5, Chrome 1-9 */ background: -webkit-gradient

css3(边框,背景,字体,颜色之RGBA与透明度opcity,图片和渐变颜色)

边框: 盒子圆角:border-radius:5px / 20%: border-radius:5px 4px 3px 2px; 左上,右上,右下,左下. 盒子阴影: box-shadow: box-shadow:x轴偏移量 y轴偏移量 阴影模糊半径(阴影颜色的模糊程度)  阴影扩展半径 阴影颜色  投影方式注意:inset 是指阴影在盒子内部,默认在外部,inset写到第一个或者最后一个参数位置,其他位置是无效的. 值有3个时,表示距离左侧.距离上侧.影子颜色: 值有4个时,表示距离左侧.距离