IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合

在阅读本文之前,对CAShapeLayer、UIBezierPath不熟悉的话,可以先阅读文章 贝塞尔曲线与Layer

如果对动画不熟悉的话,先阅读文章 动画基础、深入

Layer是绘图的画板,Bezier是画图的画笔,Animation是画图的动作。现在我们可以通过下面例子更好的让它们更好地结合在一起。

1)画一个小屋子动画

我们首先通过定义CAShapeLayer画板,然后定义path来确定画图路径。最后使用动画。如下面代码

 1     //让一个屋子的线画起来的动画效果
 2     func addCAShapeLayerAnimationStrokeEnd() {
 3         //创建CAShapeLayer,屋子的layer
 4         let slayer = CAShapeLayer.init()
 5         slayer.strokeColor = UIColor.blackColor().CGColor
 6         slayer.fillColor = UIColor.clearColor().CGColor
 7
 8         //创建屋子的路径path
 9         let path = UIBezierPath.init()
10         path.moveToPoint(CGPointMake(20, 300))
11         path.addLineToPoint(CGPointMake(20, 100))
12         path.addLineToPoint(CGPointMake(120, 50))
13         path.addLineToPoint(CGPointMake(220, 100))
14         path.addLineToPoint(CGPointMake(220, 300))
15         path.addLineToPoint(CGPointMake(20, 300))
16
17         //把画图的路径path添加到layer中
18         slayer.path = path.CGPath
19         //添加slayer到view.layer
20         self.view.layer.addSublayer(slayer)
21
22         //创建动画,strokeEnd。让线画起来的效果
23         let ani = CABasicAnimation(keyPath: "strokeEnd")
24         ani.fromValue = 0
25         ani.toValue = 1
26         ani.repeatCount = 1
27         ani.duration = 3
28
29         slayer.addAnimation(ani, forKey: "addCAShapeLayerAnimationStrokeEnd")
30     }

2)小屋子+画笔的动画

上面1)中我们画了一个屋子的动画,那么如果我们想在屋子上面添加一个画笔来画,让动画更加生动。所以我们用到keyframe动画来添加path。

 1     //让一个屋子的线画起来的动画效果
 2     func addCAShapeLayerAnimationStrokeEnd2() {
 3         //---创建CAShapeLayer,屋子的layer start---
 4         let pathLayer = CAShapeLayer.init()
 5         pathLayer.strokeColor = UIColor.blackColor().CGColor
 6         pathLayer.fillColor = UIColor.clearColor().CGColor
 7         //创建屋子的路径path
 8         let path = UIBezierPath.init()
 9         path.moveToPoint(CGPointMake(20, 300))
10         path.addLineToPoint(CGPointMake(20, 100))
11         path.addLineToPoint(CGPointMake(120, 50))
12         path.addLineToPoint(CGPointMake(220, 100))
13         path.addLineToPoint(CGPointMake(220, 300))
14         path.addLineToPoint(CGPointMake(20, 300))
15         //把画图的路径path添加到layer中
16         pathLayer.path = path.CGPath
17         //添加slayer到view.layer
18         self.view.layer.addSublayer(pathLayer)
19         //---创建CAShapeLayer,屋子的layer end---
20
21         //---创建画笔layer start---
22         let panLayer = CALayer.init()
23         panLayer.anchorPoint = CGPointZero
24         panLayer.frame = CGRectMake(0, 0, 30, 30)
25         panLayer.contents = UIImage(named: "pan.png")?.CGImage
26         self.view.layer.addSublayer(panLayer)
27         //---创建画笔layer end---
28
29         //---创建动画,strokeEnd。让线画起来的效果 start---
30         let strokeEndAnimation = CABasicAnimation(keyPath: "strokeEnd")
31         strokeEndAnimation.fromValue = 0
32         strokeEndAnimation.toValue = 1
33         strokeEndAnimation.repeatCount = 100
34         strokeEndAnimation.duration = 3
35         pathLayer.addAnimation(strokeEndAnimation, forKey: "strokeEndAnimation")
36         //---创建动画,strokeEnd。让线画起来的效果 end---
37
38         //---让画笔动起来动画start---
39         let panAnimation = CAKeyframeAnimation(keyPath: "position")
40         panAnimation.path = path.CGPath
41         panAnimation.calculationMode = kCAAnimationPaced
42         panAnimation.duration = 3
43         panAnimation.repeatCount = 100
44         panLayer.addAnimation(panAnimation, forKey: "panAnimation")
45         //---让画笔动起来动画end---
46
47     }

posted on 2016-04-10 23:00 alun-chen 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/alunchen/p/5376422.html

IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合相关推荐

  1. animation停留_这些Animation动画技巧与细节你知道么

    引言- 在 web 应用中,前端同学在实现动画效果时往往常用的几种方案: css3 transition / animation - 实现过渡动画 setInterval / setTimeout - ...

  2. ios开发学习--动画(Animation)效果源码分享--系列教程1

    Genie View        介绍: 实现所谓的genie effect.即点击最小化或删除按钮,视图会被吸进某个地方.         http://ios.itmdc.com/forum.p ...

  3. iOS通过CAShapeLayer和UIBezierPath画环形进度条

    UIBezierPath可以绘制矢量路径,而CAShapeLayer是Layer的子类,可以在屏幕进行绘制,本文主要思想是:CAShapeLayer按照UIBezierPath的矢量路径进行绘制. 效 ...

  4. iOS Instrument使用之Core Animation(图形性能)

    Core Animation图形性能 Debug Options 1Color Blended Layers 图层混合 2 Color Hits Green and Misses Red 图层缓存 3 ...

  5. CAShapeLayer + UIBezierPath

    UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...

  6. Digital Animation Bible: Creating Professional Animation with 3ds Max, Lightwave, and Maya

    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任. http://blog.csdn.net/topmvp - topmvp - How t ...

  7. iOS中CAShapeLayer用法

    (1)画虚线 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setBounds:self.bounds]; [shapeLa ...

  8. iOS 核心动画 Core Animation浅谈

    代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...

  9. ios开发——使用CALayer和Core Animation做动画效果

    一. CALayer (一). CALayer简介 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView,其实UIV ...

最新文章

  1. 在遗传算法中出现等式约束_排序算法中的稳定性-等式的处理
  2. SQL Server 2008中原生的分层数据类型:hierarchyid
  3. OSPF Router-ID的选择
  4. ITK:清除四边网格
  5. IOS8 兼容本地推送
  6. python 关于字节串和字符串
  7. Pytorch cifar10离线加载二进制文件
  8. 编程实现迷你计算器功能_VBA编程实现饲料配方计算器
  9. 第二代飞信机器人“小达”问世了
  10. 图书馆管理系统项目思路
  11. 阿里影业出品影片《1917》斩获奥斯卡多项大奖 有望国内院线上映
  12. 【ElasticSearch】 ElasticSearch 读取 流程
  13. android seekbar 源码,Android SeekBar调节音量
  14. Linux软件安装及修改软件源
  15. 16个车辆信息检测数据集收集汇总(简介及链接)
  16. (基础)Promise中then()方法使用,多次调用、链式调用
  17. 一文了解美团团节社等及分佣机制
  18. 如何重装windows10系统(超详细图文版)
  19. vue 实现元素可拖曳
  20. 【b302】侦探推理

热门文章

  1. 静态程序分析chapter5 - 常量传播分析上(Costant Propagation Analysis)
  2. java中的Native方法
  3. 最小代价生成树Prim/Kruskal(c/c++)
  4. 手把手教你写网络爬虫(4)Scrapy入门
  5. WireShark 实例分析笔记(概念)
  6. 关于php语言的使用!
  7. 获取MSSQL Server中的相关信息(视图、存储过程、触发器、表)
  8. 分享:Python fabric实践操作
  9. Eclipse juno 中安装 JBoss Tools,集成Hibernate
  10. 利用Eclipse/MyEclipse 实体类生成.hbm.xml文件