CAGradientLayer学习

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

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。
有问题或者相关需求的同学可以在下面评论或者联系本人。

联系方式:

   qq: 3145419760

   微信号:WsMl0612

   邮箱:wusong_gongzuo@163.com



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值