CAGradientLayer学习

来源:互联网 发布:excel怎么求数据的方差 编辑:程序博客网 时间:2024/05/21 00:47

这个东西很简单,这里只做基本的使用,以此作为笔记,俗话说 好记性不如烂笔头嘛。

CAGradientLayer这个鬼东西也是继承layer,下面将通过两个例子来说明具体的使用。

首先

这里先看一下这里面的东西
/* The array of CGColorRef objects defining the color of each gradient * stop. Defaults to nil. Animatable. */@property(nullable, copy) NSArray *colors;/* An optional array of NSNumber objects defining the location of each * gradient stop as a value in the range [0,1]. The values must be * monotonically increasing. If a nil array is given, the stops are * assumed to spread uniformly across the [0,1] range. When rendered, * the colors are mapped to the output colorspace before being * interpolated. Defaults to nil. Animatable. */@property(nullable, copy) NSArray<NSNumber *> *locations;/* The start and end points of the gradient when drawn into the layer's * coordinate space. The start point corresponds to the first gradient * stop, the end point to the last gradient stop. Both points are * defined in a unit coordinate space that is then mapped to the * layer's bounds rectangle when drawn. (I.e. [0,0] is the bottom-left * corner of the layer, [1,1] is the top-right corner.) The default values * are [.5,0] and [.5,1] respectively. Both are animatable. */@property CGPoint startPoint;@property CGPoint endPoint;
colors和location都是支持隐私动画的,通过上面 .h文件可以看出,CAGradientLayer的基本用法。

实例

先来看一个例子:

代码如下:
- (void)test{    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 40)];    label.center = self.view.center;    label.font = [UIFont systemFontOfSize:35];    label.backgroundColor = [UIColor clearColor];    label.textAlignment = NSTextAlignmentCenter;    label.text = @"吴松——Asong";    //这里是label是用来做文字裁剪作用    [self.view addSubview:label];        CAGradientLayer *gradientLayer1 =  [CAGradientLayer layer];    gradientLayer1.frame = label.frame;    CGColorRef red = [UIColor redColor].CGColor;    CGColorRef purple = [UIColor purpleColor].CGColor;    CGColorRef yellow = [UIColor yellowColor].CGColor;    CGColorRef orange = [UIColor orangeColor].CGColor;    //添加颜色变化,NSArray *colors;是个数组    [gradientLayer1 setColors:@[(__bridge id)red, (__bridge id)purple, (__bridge id)yellow, (__bridge id)orange]];        //用来划分显示颜色的区间,不设置的话,会是平均值    [gradientLayer1 setLocations:@[@0.3, @0.6, @0.8, @1.0]];   //Default: StartPoint :[.5,0]    [gradientLayer1 setStartPoint:CGPointMake(0, 0)];    //Default: EndPoint :[.5,1]    [gradientLayer1 setEndPoint:CGPointMake(1, 1)];    //label作为遮罩层 :简单的理解就是有对象(不透明)的地方就显示下面的内容。    gradientLayer1.mask = label.layer;    //因为只要这位mask,label的就是从原来的superView移除了,从新粘到gradientLayer1,所以要重置位置    label.frame = gradientLayer1.bounds;    [self.view.layer addSublayer:gradientLayer1];}

分析:

上面有的已经做相应的解释了,我就赘述了,我说一下,startPoint和endPoint,他们的默认值是【0.5,0】,【0.5.1】,值的范围是【0~1,0~1】
通过下面的图会更直观(此图来自网络)

是不是很直观。

看到这里,估计会有的同学还有其他的疑惑。

1.为什么要把label先放到view上,然后再移除,再放到gradientLayer上,对的,我才学习的时候,也很疑惑,后来我找到答案了,把label粘到view主要让其绘图。就是执行dradRect方法,不然就不会绘制label。
2.为什么要重新修改label的frame,因为我们设置mask之后,label就会从之前的superView移除,所以这里从新设置frame,不然会出现匪夷所思的问题

总结

是不是感觉很简单呀 ,其实这里是没有办法体现mask的强大之处的,在后面的博客中,笔者会详说mask。
Demo的连接:https://github.com/WSmalan/learn-gradientLayer
有问题或者相关需求的同学可以在下面评论或者联系本人。

联系方式:

   qq: 3145419760

   微信号:WsMl0612

   邮箱:wusong_gongzuo@163.com



0 0
原创粉丝点击