A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Simpon 于 2016-10-19 13:40 编辑

作者: sjq
版权声明:本文为作者原创文章,未经作者允许不得转载。

一、CAShapeLayer
     CAShapreLayer是继承自CALayer ,所以CAlayer得属性他也全部继承下来, 根据官方文档说明,他的坐标系统就应该与UIBeziaPath相关,因为 CAShaperLayer的形状依据给定的path来决定的.
     1.首先我们可以先根据背景视图的大小来设置ShapeLayer的宽高,   
   关于CAShapeLayer的注意点:
   a.CAShapeLayer中shape代表形状的意思,所以需要形状才能生效
   b.贝塞尔曲线可以创建基于矢量的路径,而UIBezierPath类是对CGPathRef的封装
   c.贝塞尔曲线给CAShapeLayer提供路径,CAShapeLayer在提供的路径中进行渲染。
  1. //1.首先创建一个背景视图
  2.     UIView* bgView = [[UIViewalloc]initWithFrame:CGRectMake(0, 150, kScreenSize.width, 100)];
  3.     bgView.backgroundColor = [UIColorblackColor];
  4.     [self.viewaddSubview:bgView];
  5.      //2. 创建一个贝塞尔曲线路径, 根据贝塞尔曲线, 我们画出连接2各点的一条线
  6.     UIBezierPath *path = [UIBezierPathbezierPath];
  7.     [path moveToPoint:CGPointZero];
  8.     [path addLineToPoint:CGPointMake(kScreenSize.width , 0)];
  9.     //设置背景色
  10.     self.view.backgroundColor = [UIColorblackColor];
复制代码
    2. 通过CAShapeLayer来绘制一条路径
  1. CAShapeLayer *shape = [CAShapeLayer layer];
  2.     shape.frame = bgView.bounds;
  3.     shape.lineWidth = 95;
  4.     //shapeLayerd填充颜色
  5.     shape.fillColor = [UIColor orangeColor].CGColor;
  6.     //shapeLayerd的绘制颜色
  7.     shape.strokeColor = [UIColor greenColor].CGColor;
  8.     //将绘制路径赋予shapeLayer上
  9.     shape.path = path.CGPath;
  10.     [bgView.layer addSublayer:shape];
复制代码
    3.此时,我们看下用CAShapeLyer画个的效果图


   这里需要专门说一下
   shape.lineDashPattern属性, 他可以通过控制间隔数量以及间隔宽度, 来实现间断线与虚线的效果, 如 shape.lineDashPattern = @[@2, @2];,那么接下来显示的内容就会以前面给出的大小来实现的.

二、 CAGradientLayer
     接下来涉及到CAGradientLayer,这个层你可以通过指定颜色,一个开始的点,一个结束的点和梯度类型使你能够简单的在层上绘制一个梯度, 并且必须配备一张背景图片 渐变色的作用范围,变化梯度的方向,颜色变换的作用点都和CAGradientLayer的坐标系统有关
   1.CAGradientLayer用于处理渐变色的层结构
   2.CAGradientLayer的渐变色可以做隐式动画
   3.大部分情况下,CAGradientLayer时和CAShapeLayer配合使用的



  1. //4.创建背景图层
  2.     CAGradientLayer *gradientLayer =  [CAGradientLayer layer];
  3.     //4.1 设置gradientLayer的frame
  4.     gradientLayer.frame = bgView.bounds;

  5.     //4.2 颜色分配
  6.     [gradientLayer setColors:[NSArray arrayWithObjects:
  7.     (id)[[[UIColor purpleColor] colorWithAlphaComponent:1] CGColor],
  8.     (id)[[[UIColor blueColor] colorWithAlphaComponent:1] CGColor],
  9.     (id)[[[UIColor greenColor] colorWithAlphaComponent:1] CGColor],
  10.     (id)[[[UIColor yellowColor] colorWithAlphaComponent:1] CGColor],
  11.     (id)[[UIColor orangeColor] colorWithAlphaComponent:1].CGColor,
  12.     (id)[[UIColor redColor] CGColor],nil]];
  13.     //4.3 设置每种颜色所处的位置 也就是colors的显示区域 3,CAGradientLayer的startPoint和endPoint会直接决定颜色的绘制方向

  14.     [gradientLayer setLocations:[NSArray arrayWithObjects:
  15.                                  [NSNumber numberWithFloat:0.0],
  16.                                  [NSNumber numberWithFloat:0.2],
  17.                                  [NSNumber numberWithFloat:0.4],
  18.                                  [NSNumber numberWithFloat:0.6],
  19.                                  [NSNumber numberWithFloat:0.8],
  20.                                  [NSNumber numberWithFloat:1.0],
  21.                                  nil]];
  22.    
  23.     //4.4 设置起始点
  24.     setStartPoint 是颜色的开始渐变的开始点,默认的是(0,0)也就是左上角
  25.     [gradientLayer setStartPoint:CGPointMake(0, 0)];
  26.      setEndPoint 是颜色的停止渐变的点,默认的是(1,1)
  27.     [gradientLayer setEndPoint:CGPointMake(1, 0)];
  28.     //4.5 截取渐变层
  29.     [gradientLayer setMask:shape];
  30.    
  31.     //5.背景视图层添加gradientLayer
  32.     [bgView.layer addSublayer:gradientLayer];

  33. //设置开始于结束位置1,CAGradientLayer的坐标系统是从(0,0)到(1,1)绘制的矩形

  34.     [gradientLayer setStartPoint:CGPointMake(0, 0.5)];
  35.     [gradientLayer setEndPoint:CGPointMake(1, 0.5)];
  36.     [gradientLayer setMask:shape]; //用progressLayer来截取渐变层

  37.     [bgView.layeraddSublayer:gradientLayer];最终效果图
复制代码




精华推荐:



5 个回复

倒序浏览
给力,遇到此难题的朋友们看过来!
回复 使用道具 举报
虽然还没学到,先了解一下、、
回复 使用道具 举报
我现在还看不太懂,后续一定经常来
回复 使用道具 举报
过来溜达一圈,返现很高深啊,没有整明白.
回复 使用道具 举报
多谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马