iOS动画小记

动画效果并不受限于某一个框架,iOS动画绝对不等于coreAnimation,提供一些动画api也只是coreAnimation冰山一角.
虽然不受限于框架,但是毕竟还得用API来实现动画,只考虑常规UI动画的话,基本上是UIKit,CoreAnimation,CoreGraphics这三个了.
另外ImageIO可能也算,毕竟gif也是动画,需要用ImageIO来解析gif.
上面都是中上层框架,此外还有更底层的用OpenGL/Metal来绘制动画.
涉及的领域包括图形学基础,iOS线程与UI的关系,coreAnimation渲染流程,GPU与CPU如何分工,以及显示器的工作原理等等.

从动画的表现来说:
1.它可以是内容的变化,比如图片切换,包括其变换形式,比如渐变,翻页,翻滚等等;
2.也可以是2d或3d的仿射变换,平移,缩放,旋转;
3.可以是颜色与透明度的变化.
4.可以是图形绘制的变化,从一个点,到一条线,到一个图形.

从实现动画的角度来说,可以是:
1.使用框架的API实现,比如把定时器+透明度换成CABasicAnimation.框架不仅仅提供了如何实现动画,还提供了一些预设算法,比如timing函数,比如贝塞尔曲线,以及物理引擎等.
2.通过修改载体的属性来实现,前面说到动画的表现,实现这些表现就可以了,例如整一个定时器,定期改变载体的属性,比如坐标,比如透明度.这方面主要是在框架不能满足需求的时候使用(其实更多的时候是我们不知道框架能做这种事,或者说不了解框架).

通过CoreGraphics来实现动画,主要用来实现图形绘制,本身和动画没啥关系,实质就是实时的高频率的绘制形成动画效果.
本身并没有提供与动画相关的API,只能通过第一条来实现动画.
主要是为了解决只能用CoreGraphics来绘制的图形,它所产生的动画.
比如扇形或者环形的图表,或者一些线条与色块变换的这种图标动画.

CoreAnimation的脉络:图层树 -> 视觉效果 -> 寄宿图 -> 仿射变换 -> 专用图层 -> 隐式与显式 -> 速度函数 -> 图层时间 -> 图像IO -> 性能调优.
CALayer及其各种子类,可以使用第一条来实现动画.
CAScrollLayer类似UIScrollView的效果;
CATiledLayer图层缩放,使用异步实现加载查看大图;
CATransformLayer实现真正的3D图层,而不是仿射变换;
CAReplicatorLayer可以制作图层的副本,这些副本可以应用不同的仿射变换和颜色;
另外还有一些用于Metal和OpenGL的CALayer子类.
并且CAAnimation及其子类提供了专门的动画API,对应实现动画的第二条.
CAPropertyAnimation属性动画,可作用于CALayer的带有Animatable描述的属性.但它是抽象类,不直接使用.
CABasicAnimation继承自CAPropertyAnimation,使用它实现属性动画.
CAKeyframeAnimation利用timingFunction实现自定义的帧动画.
CASpringAnimation在属性动画的基础上实现弹性效果.
使用CAEmitterLayer和CAEmitterCell实现粒子效果,前者是显示层,后者是控制器.
以及与速度相关的CAMediaTimingFunction,用于定义时间函数,有预定的值比如淡入淡出等等.或者使用贝塞尔曲线实现.
CADisplayLink或者NSTimer控制绘图与屏幕刷新同步,协议CAMediaTiming对"时间"的定义.
CATransition转场动画,
包括movein,reveal,push,fade,pageCurl,pageUnCurl,cube,oglFlip,stuckEffect,rippleEffect,cameraIrisHollowOpen,cameraIrisHollowClose等.
CATransaction隐式事务.

UIKit是个大杂烩,实现动画的API也是花样繁多,并且提供了一套实现动画+控制动画进程+获取动画状态的API.
甚至还准备了物理引擎UIDynamicAnimator.定义了一些物理行为如碰撞,重力,弹性,加速度等.甚至还可以描述物理中场的概念.
不仅是对CoreAnimation的封装,还增加了很多扩展.
UIViewPropertyAnimator来实现属性动画,
UIViewAnimating协议控制动画的状态,包括活跃(开始与暂停)和非活跃(取消与完成),
UIMotionEffectGroup实现动画组,
UIViewImplicitlyAnimating在动画的进程中修改,
UITimingCurveProvider设置时间函数.
此外最熟悉的还得是UIView中提供的一些方法, animateWithDuration系列, transitionWithView系列和animateKeyframesWithDuration等.
还有视图控制器转场动画相关的View controller transitions,通过一系列代理来自定义转场动画以及获取动画状态.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容