CAAnimation
序言
CAAnimation是一个抽象类,遵循了CAMediaTiming协议和CAAction协议!我们不要直接使用CAAnimation类,而是使用其子类:
CATransition:提供渐变效果,如推拉push效果,消退fade效果,揭开reveal效果CAAnimationGroup:允许多个动画同时播放CABasicAnimation: 提供了对单一动画的实现CAKeyframeAnimation: 关键桢动画,可以定义动画路线CAPropertyAnimation:属性动画,通常不直接使用,而是使用CABasicAnimation子类
创建对象
我们看到有一个工厂方法来创建CAAnimation对象,因此,我们通常都使用这个方法来创建动画:
| 
 1 
2 
3 
 | 
 + (instancetype)animation; 
 | 
当然不同类型的子类使用的方法不一样,对于继承于CAPropertyAnimation的子类,都可以通过属性路径来创建:
| 
 1 
2 
3 
4 
5 
6 
 | 
 /* Creates a new animation object with its `keyPath' property set to 
 * 'path'. */ 
+ (instancetype)animationWithKeyPath:(nullable NSString *)path; 
 | 
遵守了CAMediaTiming协议
这个协议是是用于配置动画的相关属性的,英文部分是官方的注释,中文部分为笔者的理解,下面一一讲解:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
 | 
 /* The begin time of the object, in relation to its parent object, if 
 * applicable. Defaults to 0. */ 
// 获取或设置动画的开始时间,默认为0 
@property CFTimeInterval beginTime; 
/* The basic duration of the object. Defaults to 0. */ 
// 获取或设置动画的时长,也就是整个动画的总时长 
@property CFTimeInterval duration; 
/* The rate of the layer. Used to scale parent time to local time, e.g. 
 * if rate is 2, local time progresses twice as fast as parent time. 
 * Defaults to 1. */ 
// 获取或设置动画的播放速度,默认为1,若设置为2,则以两倍的速度播放。 
// 如果设置小于1,则相当于慢放。 
@property float speed; 
/* Additional offset in active local time. i.e. to convert from parent 
 * time tp to active local time t: t = (tp - begin) * speed + offset. 
 * One use of this is to "pause" a layer by setting `speed' to zero and 
 * `offset' to a suitable value. Defaults to 0. */ 
// 获取或设置当前播放的进度,默认为0。有这么一种使用场景:设置speed为0, 
// 然后设置这个timeOffset为合适的值,就可以暂停动画了 
@property CFTimeInterval timeOffset; 
/* The repeat count of the object. May be fractional. Defaults to 0. */ 
// 获取或设置动画播放次数,默认为0表示只播放一次。 
// 设置为HUGE_VALF表示无限制播放次数 
@property float repeatCount; 
/* The repeat duration of the object. Defaults to 0. */ 
// 获取或设置重复播放的动画时长,不要与repeatCount混合使用 
@property CFTimeInterval repeatDuration; 
/* When true, the object plays backwards after playing forwards. Defaults 
 * to NO. */ 
// 获取或设置是否回放。 
// 如果设置为YES,在动画播放完成时,就会以动画的效果回到起点 
// 如果设置为NO,播放完成时,就会停留在终点 
@property BOOL autoreverses; 
/* Defines how the timed object behaves outside its active duration. 
 * Local time may be clamped to either end of the active duration, or 
 * the element may be removed from the presentation. The legal values 
 * are `backwards', `forwards', `both' and `removed'. Defaults to 
 * `removed'. */ 
// 获取或设置动画完成时的动作 
// forwards表示动画完成时,也回到起点而不是留在终点 
// backwards表示动画完成时,就停留在终点 
// removed表示完成时就移除,默认就是removed 
@property(copy) NSString *fillMode; 
 | 
遵守了CAAction协议
这个协议只有一个方法,我们可以调用此方法来触发指定的事件,这样接收者就可以接收到代理。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
 /* Called to trigger the event named 'path' on the receiver. The object 
 * (e.g. the layer) on which the event happened is 'anObject'. The 
 * arguments dictionary may be nil, if non-nil it carries parameters 
 * associated with the event. */ 
- (void)runActionForKey:(NSString *)event 
                 object:(id)anObject 
              arguments:(nullable NSDictionary *)dict; 
 | 
CAAnimationDelegate代理
CAAnimation为这么个属性:
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
 /* The delegate of the animation. This object is retained for the 
 * lifetime of the animation object. Defaults to nil. See below for the 
 * supported delegate methods. */ 
@property(nullable, strong) id delegate; 
 | 
我们只要指定了代理,就可以实现这两个代理方法:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
 /* Called when the animation begins its active duration. */ 
// 动画开始时的回调 
- (void)animationDidStart:(CAAnimation *)anim; 
/* Called when the animation either completes its active duration or 
 * is removed from the object it is attached to (i.e. the layer). 'flag' 
 * is true if the animation reached the end of its active duration 
 * without being removed. */ 
// 动画停止的回调,可以通过flag判断动画是否是完成还是暂停 
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag; 
 | 
removedOnCompletion属性
当我们动画完成时,如果希望动画就自动移除的话,我们可以设置此属性为YES,默认值为YES。如果我们想要循环或者执行多次动画,就将此属性设置为NO
| 
 1 
2 
3 
4 
5 
6 
7 
 | 
 /* When true, the animation is removed from the render tree once its 
 * active duration has passed. Defaults to YES. */ 
// 当duration值已经达到时,是否将动画自动从渲染树上移除 
@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion; 
 | 
timingFunction属性
这个属性是用于指定动画移动的步调是什么样式,比如线性。
| 
 1 
2 
3 
4 
5 
6 
 | 
 /* A timing function defining the pacing of the animation. Defaults to 
 * nil indicating linear pacing. */ 
@property(nullable, strong) CAMediaTimingFunction *timingFunction; 
 | 
关于CAMediaTimingFunction类,主要是这向个方法。当创建时,我们+functionWithName:工厂方法来创建系统已经提供的样式。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
 /* A convenience method for creating common timing functions. The 
 * currently supported names are `linear', `easeIn', `easeOut' and 
 * `easeInEaseOut' and `default' (the curve used by implicit animations 
 * created by Core Animation). */ 
+ (instancetype)functionWithName:(NSString *)name; 
 | 
其中这个name有这几个变量对应的:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
 | 
 // 线性动画 
CA_EXTERN NSString * const kCAMediaTimingFunctionLinear 
    __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); 
// 快速进入动画 
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseIn 
    __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); 
// 快速出来动画 
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseOut 
    __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); 
// 快速进入出来动画 
CA_EXTERN NSString * const kCAMediaTimingFunctionEaseInEaseOut 
    __OSX_AVAILABLE_STARTING (__MAC_10_5, __IPHONE_2_0); 
// 默认动画是curve动画,也就是曲线动画 
CA_EXTERN NSString * const kCAMediaTimingFunctionDefault 
    __OSX_AVAILABLE_STARTING (__MAC_10_6, __IPHONE_3_0); 
 | 
如果我们想要让其移动动画是按贝塞尔曲线的路径行动,那么可以用这两个方法来创建:
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
 /* Creates a timing function modelled on a cubic Bezier curve. The end 
 * points of the curve are at (0,0) and (1,1), the two points 'c1' and 
 * 'c2' defined by the class instance are the control points. Thus the 
 * points defining the Bezier curve are: '[(0,0), c1, c2, (1,1)]' */ 
+ (instancetype)functionWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 
- (instancetype)initWithControlPoints:(float)c1x :(float)c1y :(float)c2x :(float)c2y; 
 | 
CAAnimation的更多相关文章
- 再谈CAAnimation动画
		
CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: ...
 - Quartz2D复习(四) --- 图层CALayer和动画CAAnimation
		
1.CALayer 1).在ios中,能看得见摸得着的东西基本上都是UIView, 比如按钮.文本标签.文本输入框.图标等,这些都是UIView 2).UIView之所以能显示在屏幕上,完全是因为它内 ...
 - iOS:核心动画的详解介绍:CAAnimation(抽象类)及其子类
		
核心动画的详解介绍:CAAnimation(抽象类) 1.核心动画基本概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍! 使用它 ...
 - CAAnimation解读
		
序言 CAAnimation是一个抽象类,遵循了CAMediaTiming协议和CAAction协议!我们不要直接使用CAAnimation类,而是使用其子类: CATransition:提供渐变效果 ...
 - - (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; 方法浅析
		
转载自:http://blog.csdn.net/ronaldo_carry/article/details/49070119 将viewdidload里面的代码全部注释掉 - (void)viewD ...
 - 核心动画  CAAnimation 进阶
		
转载自:http://www.cofcool.net/development/2015/06/20/ios-study-note-nine-CoreAnimation/ Core Animation, ...
 - iOS开发CAAnimation详解
		
Core Animation,即为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能.Core Anima ...
 - CAAnimation 动画支撑系统
		
Model支撑:(依附对象) 从presentLayer获取数据: 渲染树为私有: -(void)addAnimation:(CAAnimation *)anim forKey:(NSString * ...
 - iOS开发CAAnimation类动画, CATransition动画
		
#pragma mark - CAAnimation类.实现动画 #pragma mark ** CABasicAnimation 动画 - (IBAction)handleCABasicAnimat ...
 - 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO
		
知识点复习 1. 触摸事件&手势识别 1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加) 附加在某一个特定视图上的, ...
 
随机推荐
- 五、PL/SQL循环、游标、函数和过程
			
--PL/SQL基础知识学习 --一.PL/SQL语句块,基础语法格式 DECLARE --变量声明列表 info varchar(25); --变量声明 stu_unm integer := 15; ...
 - ms sql server 大批量导入
			
BULK INSERT 文章:BULK INSERT如何将大量数据高效地导入SQL Server 可以首先在数据库建一个表Temp_tb,这个表作为导入数据的表,然后使用bulk insert导入,导 ...
 - php实现设计模式————单例模式
			
php实现设计模式————单例模式 什么是单例模式 为什么要使用单例模式 php中有哪些方式实现新建一个对象实例 如何阻止这种实例化实现理想的单例模式 代码实现 什么是单例模式 为什么要使用单例模式 ...
 - [HNOI2004]宠物收养场(Treap)
			
洛谷传送门 这题真是恶心,一开始没理解题意. 原来如果有狗,狗就会存在收养场中,直到有人来领养: 如果有人,人也会存在收养场中,直到有狗来被领养. 就是建一个treap,狗来把狗插进去,人来后把狗领养 ...
 - docker改变镜像源
			
sudo echo “DOCKER_OPTS=\”\$DOCKER_OPTS –registry-mirror=http://your-id.m.daocloud.io -d\”” >> ...
 - vscode 打开新文件覆盖窗口,始终显示一个窗口
			
一直在使用vscode 编辑器,里面的扩展用的比较舒服,但是最近遇到一个小问题,一直也没有找好的解决办法,今天无意中把问题给解决了.具体如下 之前使用编辑器,可以同时打开多个文件,而且是多窗口展示的, ...
 - Gym 215177D 母亲节的礼物
			
Gym 215177D 母亲节的礼物 Problem : 给n个点m条边的无向图,每个点的度数小于等于7,要求用4种不同的颜色给每个点染色,使得每个点相邻的点中最多只有一个相同颜色的点.(n<= ...
 - CodeForces 599B Spongebob and Joke
			
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...
 - [PythonCode]扫描局域网的alive ip地址
			
内网的主机都是自己主动分配ip地址,有时候须要查看下有那些ip在使用,就写了个简单的脚本. linux和windows下都能够用,用多线程来ping1-255全部的地址,效率不高.2分钟左右. 先凑合 ...
 - O2O助汪峰成功逆袭,汪峰最终上头条了
			
8月2日七夕情人节,汪峰<峰暴来临>演唱会在鸟巢10万人体育场唱响,各大报纸.站点娱乐板块并没有等来汪峰向国际章求婚的"头条",只是,与乐视合作现场演出+付费直播的O2 ...