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 }
转载于:https://www.cnblogs.com/alunchen/p/5376422.html
IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合相关推荐
- animation停留_这些Animation动画技巧与细节你知道么
引言- 在 web 应用中,前端同学在实现动画效果时往往常用的几种方案: css3 transition / animation - 实现过渡动画 setInterval / setTimeout - ...
- ios开发学习--动画(Animation)效果源码分享--系列教程1
Genie View 介绍: 实现所谓的genie effect.即点击最小化或删除按钮,视图会被吸进某个地方. http://ios.itmdc.com/forum.p ...
- iOS通过CAShapeLayer和UIBezierPath画环形进度条
UIBezierPath可以绘制矢量路径,而CAShapeLayer是Layer的子类,可以在屏幕进行绘制,本文主要思想是:CAShapeLayer按照UIBezierPath的矢量路径进行绘制. 效 ...
- iOS Instrument使用之Core Animation(图形性能)
Core Animation图形性能 Debug Options 1Color Blended Layers 图层混合 2 Color Hits Green and Misses Red 图层缓存 3 ...
- CAShapeLayer + UIBezierPath
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.使用此类可以定义常见的圆形.多边形等形状 .我们使用直线.弧(arc) ...
- Digital Animation Bible: Creating Professional Animation with 3ds Max, Lightwave, and Maya
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任. http://blog.csdn.net/topmvp - topmvp - How t ...
- iOS中CAShapeLayer用法
(1)画虚线 CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setBounds:self.bounds]; [shapeLa ...
- iOS 核心动画 Core Animation浅谈
代码地址如下: http://www.demodashi.com/demo/11603.html 前记 关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIVi ...
- ios开发——使用CALayer和Core Animation做动画效果
一. CALayer (一). CALayer简介 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView,其实UIV ...
最新文章
- 在遗传算法中出现等式约束_排序算法中的稳定性-等式的处理
- SQL Server 2008中原生的分层数据类型:hierarchyid
- OSPF Router-ID的选择
- ITK:清除四边网格
- IOS8 兼容本地推送
- python 关于字节串和字符串
- Pytorch cifar10离线加载二进制文件
- 编程实现迷你计算器功能_VBA编程实现饲料配方计算器
- 第二代飞信机器人“小达”问世了
- 图书馆管理系统项目思路
- 阿里影业出品影片《1917》斩获奥斯卡多项大奖 有望国内院线上映
- 【ElasticSearch】 ElasticSearch 读取 流程
- android seekbar 源码,Android SeekBar调节音量
- Linux软件安装及修改软件源
- 16个车辆信息检测数据集收集汇总(简介及链接)
- (基础)Promise中then()方法使用,多次调用、链式调用
- 一文了解美团团节社等及分佣机制
- 如何重装windows10系统(超详细图文版)
- vue 实现元素可拖曳
- 【b302】侦探推理
热门文章
- 静态程序分析chapter5 - 常量传播分析上(Costant Propagation Analysis)
- java中的Native方法
- 最小代价生成树Prim/Kruskal(c/c++)
- 手把手教你写网络爬虫(4)Scrapy入门
- WireShark 实例分析笔记(概念)
- 关于php语言的使用!
- 获取MSSQL Server中的相关信息(视图、存储过程、触发器、表)
- 分享:Python fabric实践操作
- Eclipse juno 中安装 JBoss Tools,集成Hibernate
- 利用Eclipse/MyEclipse 实体类生成.hbm.xml文件