这个东西很简单,这里只做基本的使用,以此作为笔记,俗话说 好记性不如烂笔头嘛。
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。
有问题或者相关需求的同学可以在下面评论或者联系本人。