做开发这么长时间,由于是中途转的iOS ,有许多基础知识掌握的不牢靠,所以最近决定整理整理基础知识,补补之前欠下的债,毕竟,出来混总是要还的。我专门开了一个文集,专门写动画的,个人认为动画在iOS中所占的比重还是非常大的。代码是需要积累的,知识也是需要积累的,倘若基础知识都没掌握好,我感觉到后面的路也不是很稳健。
废话不多说了,今天先梳理一下动画的知识点。iOS 动画 我个人认为分为两类动画(只是个人观点,基础不好,如有错误请指正),1.核心动画 Core Animation 2.UIView动画 。
今天梳理梳理核心动画的知识点:
什么是核心动画:核心动画是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。
Core Animation 是跨平台的,可以在iOS平台和Mac OS X。
Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。不阻塞主线程。
首先我们得搞清楚Core Animation结构图:
由结构图可以看出,
Core Animation是所有动画类的的父类,但是不能使用,必须使用它的子类。能用的子类有:CABasicAnimation(基础动画),CAKeyframeAnimation(帧动画),CATransition(转场动画),CAAnimationGroup(组动画)。以上的4个类都属于核心动画的类。
核心动画所共有的属性:
duration:动画持续时间
repeatCount:重复次数
repeatDuration:重复时间
removedOnCompletion:YES 时动画结束后会从图层(layer)上移除,会恢复到动画运行之前的样子。为NO时反之。 不过还要设置fillMode为kCAFillModeForwards .
fillMode:设置动画结束之后动画的属性。
beginTime:设置动画延迟时间,延迟几秒开始。
timingFunction:控制动画运行节奏。
delegate:动画代理。
CAAnimation在分类中定义了代理方法
@interfaceNSObject
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
速度控制函数(CAMediaTimingFunction)
1> kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
2> kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
3> kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
4> kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。 这个是默认的动画行为。
补充:核心动画的使用
1.使用它需要先添加QuartzCore.framework框架和引入主头文件(iOS7不需要)
2.初始化一个CAAnimation对象,并设置一些动画相关属性,包括opacity, position, transform, bounds, contents等(可以在API文档中搜索:CALayer Animatable Properties)
3.通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了
4.通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画
CALayer核心动画与UIView动画的区别:
UIView封装的动画执行完毕之后不会反弹。即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的
网友评论