CGRect rect = CGRectMake(100, 100, 100, 100);

UIView * bgView = [[UIView alloc]initWithFrame:rect];

bgView.backgroundColor = [UIColor grayColor];

[self.view addSubview:bgView];

CAShapeLayer * trackLayer = [CAShapeLayer layer];

trackLayer.frame = bgView.bounds;

[bgView.layer addSublayer:trackLayer];

trackLayer.fillColor = [[UIColor blackColor] CGColor];//填充颜色,这里应该是  clearColor

trackLayer.strokeColor = [[UIColor redColor] CGColor];//边框颜色

trackLayer.opacity = 0.5;

trackLayer.lineCap = kCALineCapRound;

trackLayer.lineWidth = 4.0;  // 红色的边框宽度

UIBezierPath * path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(50, 50) radius:48 startAngle:degreesToRadians(-210) endAngle:degreesToRadians(30) clockwise:YES];

//角度是从 -210到30度,具体可以看如下图所示

trackLayer.path = [path CGPath];

运行后的结果如下

基于以上的代码,下面添加渐变的效果

CALayer * gradinetLayer = [CALayer layer];

CAGradientLayer * gradLayer1 = [CAGradientLayer layer];

gradLayer1.frame = CGRectMake(0, 0, bgView.frame.size.width/2, bgView.frame.size.height);

[gradLayer1 setColors:[NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor],(id)[UIColorFromRGB(0xfde802) CGColor], nil]];

[gradLayer1 setLocations:@[@0.5,@0.9,@1 ]];

[gradLayer1 setStartPoint:CGPointMake(0.5, 1)];

[gradLayer1 setEndPoint:CGPointMake(0.5, 0)];

[gradinetLayer addSublayer:gradLayer1];

CAGradientLayer * gradLayer2 = [CAGradientLayer layer];

gradLayer2.frame = CGRectMake(bgView.frame.size.width/2, 0, bgView.frame.size.width/2, bgView.frame.size.height);

[gradLayer2 setColors:[NSArray arrayWithObjects:(id)[UIColorFromRGB(0xfde802) CGColor],(id)[[UIColor blueColor] CGColor], nil]];

[gradLayer2 setStartPoint:CGPointMake(0.5, 0)];

[gradLayer2 setEndPoint:CGPointMake(0.5, 1)];

[gradinetLayer addSublayer:gradLayer2];

//[gradinetLayer setMask:trackLayer];

[bgView.layer addSublayer:gradinetLayer];

本文转自  张江论坛   转载请注明 http://www.999dh.net/home.php?mod=space&uid=1&do=blog&quickforward=1&id=328

以上的代码运行后得到的结果如下:

解释如下:

setLocations  理论上来说,是设置 colors的显示区域的(这里还未弄清楚原理)

setStartPoint 是颜色的开始渐变的开始点,默认的是(0,0)也就是左上角

setEndPoint 是颜色的停止渐变的点,默认的是(1,1)

如果按默认的来,gradLayer1 的颜色渐变应该是从左上角由redcolor渐变到右下角(颜色为 0xfde802)

而代码中设置的 startPoint为(0.5,1),指的是在x轴中间,y轴底部;endPoint为(0.5,0)指的是在x轴中间,y轴顶部。

最后将代码[gradinetLayer setMask:trackLayer]; 注释去掉,得到如下的运行结果

这里主要的作用就是 setMask的功劳,但是为什么trackLayer的strokeColor没有生效,这里也不是很清楚。(哎,不懂的太多了哎)

IOS CAShapeLayer CAGradientLayer UIBezierPath 使用实例的更多相关文章

  1. iOS关于CAShapeLayer与UIBezierPath的知识内容

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 . 1:UIBezierPath: UIBezierPath是在 UIKit 中 ...

  2. iOS CAShapeLayer精讲

    前言 CAShapeLayer继承自CALayer,因此,可使用CALayer的所有属性.但是,CAShapeLayer需要和贝塞尔曲线配合使用才有意义. 关于UIBezierPath,请阅读文章:i ...

  3. iOS CAShapeLayer、CADisplayLink 实现波浪动画效果

    iOS CAShapeLayer.CADisplayLink 实现波浪动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnima ...

  4. IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合

    在阅读本文之前,对CAShapeLayer.UIBezierPath不熟悉的话,可以先阅读文章 贝塞尔曲线与Layer 如果对动画不熟悉的话,先阅读文章 动画基础.深入 Layer是绘图的画板,Bez ...

  5. iOS CAShapeLayer记录

    基本知识 看看官方说明: /* The shape layer draws a cubic Bezier spline in its coordinate space. * * The spline ...

  6. 使用CAShapeLayer与UIBezierPath画出想要的图形

    使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形 步骤: 1.新建UIBezierPath对象bezierPath 2.新建CAS ...

  7. 使用CAShapeLayer和UIBezierPath画一个自定义半圆弧button

    通常我们使用系统自带的UIButton时,一般都是Rect矩形形式的,或则美工给出一张半圆弧的按钮,如图为一张半圆加三角形的按钮,而此时,如果给按钮添加点击事件时,响应事件依然为矩形区域,不符合我们的 ...

  8. iOS之UI--涂鸦画板实例

     iOS之UI--涂鸦画板实例  首先是搭建框架 其他的略过,直接展示效果: 然后接下来上传搭建好两个控制器框架的源码百度云下载链接: http://pan.baidu.com/s/1skjpDox  ...

  9. CAShapeLayer(UIBezierPath)、CAGradientLayer绘制动态小车

    看到一个大神写的代码,引用过来让大家看看! //  1.CAShapeLayer是一种特殊的层,可以在上面渲染图形. //  2.CAShapeLayer继承自CALayer,可使用CALayer的所 ...

随机推荐

  1. Qt源码分析之QObject

    原文:http://blog.csdn.net/oowgsoo/article/details/1529284 我感觉oowgsoo兄弟写的分析相当透彻,赞! 1.试验代码: #include < ...

  2. Quartz 并发/单线程

    Quartz 并发/单线程 Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞.1.在Spring中这 ...

  3. highcharts 结合phantomjs纯后台生成图片

    highcharts 结合phantomjs纯后台生成图片 highcharts 这个图表展示插件我想大家应该都知道,纯javascript编写,相比那些flash图表插件有很大的优势,至少浏览器不用 ...

  4. Java API —— 递归

    1.方法定义中调用方法本身的现象 2.递归注意实现         1) 要有出口,否则就是死递归         2) 次数不能太多,否则就内存溢出         3) 构造方法不能递归使用 3. ...

  5. SAP 物料基本单位与BOM单位

    比如:物料的基本单位是G,可该物料放到BOM中的单位却是PC,该如何实现呢? 1. 首先要弄清楚BOM单位优先取的是发货单位(工厂数据视图1),当发货单位为空时,取基本单位: 2. 然后再建立单位G ...

  6. javascript中===与==

    == equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 类型转换规则:Boolean> ...

  7. C# App.config 详解

      读语句: String str = ConfigurationManager.AppSettings["DemoKey"]; 写语句: Configuration cfa = ...

  8. chrome控制台小技巧

    对于大多数开发人员来说,chrome控制台最常用的命令就是 console.log()了,然后还有一些其他类似的命令,如: console.info()   提示信息 console.error() ...

  9. hdu 1559 最大子矩阵 (简单dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1559 #include <cstring> #include <cstdlib> ...

  10. bzoj3272 3638

    好题,这道题可以用线段树来快速模拟费用流寻找最长增广路 这样修改怎么做也很显然了 type node=record s,lx,rx,mx,lp,rp,pb,pe:longint; end; ..*,. ...