您好,欢迎访问一九零五行业门户网

核心动画(Core Animation)_html/css_WEB-ITnose

core animation是一组非常强大的动画处理api,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加quartzcore.framework和引入对应的框架
开发步骤:
初始化一个动画对象(caanimation)并设置一些动画相关属性
添加动画对象到层(calayer)中,开始执行动画
calayer中很多属性都可以通过caanimation实现动画效果,包括:opacity、position、transform、bounds、contents等(可以在api文档中搜索:calayer animatable properties)
通过调用calayer的addanimation:forkey增加动画到层(calayer)中,这样就能触发动画了。通过调用removeanimationforkey可以停止层中的动画
core animation的动画执行过程都是在后台操作的,不会阻塞主线程
caanimation继承结构
caanimation
所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它具体的子类
属性解析:(红色代表来自camediatiming协议的属性)
duration:动画的持续时间
repeatcount:动画的重复次数
repeatduration:动画的重复时间
removedoncompletion:默认为yes,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为no,不过还要设置fillmode为kcafillmodeforwards
fillmode:决定当前对象在非active时间段的行为.比如动画开始之前,动画结束之后
begintime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为cacurrentmediatime()+2,cacurrentmediatime()为图层的当前时间
timingfunction:速度控制函数,控制动画运行的节奏
delegate:动画代理
capropertyanimatio
是caanimation的子类,也是个抽象类,要想创建动画对象,应该使用它的两个子类:cabasicanimation和cakeyframeanimation
属性解析:
keypath:通过指定calayer的一个属性名称为keypath(nsstring类型),并且对calayer的这个属性的值进行修改,达到相应的动画效果。比如,指定@”position”为keypath,就修改calayer的position属性的值,以达到平移的动画效果
cabasicanimation
capropertyanimation的子类
属性解析:
fromvalue:keypath相应属性的初始值
tovalue:keypath相应属性的结束值
随着动画的进行,在长度为duration的持续时间内,keypath相应属性的值从fromvalue渐渐地变为tovalue
如果fillmode=kcafillmodeforwards和removedoncomletion=no,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。比如,calayer的position初始值为(0,0),cabasicanimation的fromvalue为(10,10),tovalue为(100,100),虽然动画执行完毕后图层保持在(100,100)这个位置,实质上图层的position还是为(0,0)
cakeyframeanimation
capropertyanimation的子类,跟cabasicanimation的区别是:cabasicanimation只能从一个数值(fromvalue)变到另一个数值(tovalue),而cakeyframeanimation会使用一个nsarray保存这些数值
属性解析:
values:就是上述的nsarray对象。里面的元素称为”关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path:可以设置一个cgpathref\cgmutablepathref,让层跟着路径移动。path只对calayer的anchorpoint和position起作用。如果你设置了path,那么values将被忽略
keytimes:可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keytimes中的每一个时间值都对应values中的每一帧.当keytimes没有设置的时候,各个关键帧的时间是平分的
cabasicanimation可看做是最多只有2个关键帧的cakeyframeanimation
caanimationgroup
caanimation的子类,可以保存一组动画对象,将caanimationgroup对象加入层后,组中所有动画对象可以同时并发运行
属性解析:
animations:用来保存一组动画对象的nsarray
默认情况下,一组动画对象是同时运行的,也可以通过设置动画对象的begintime属性来更改动画的开始时间
catransition
caanimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。ios比mac os x的转场动画效果少一点
uinavigationcontroller就是通过catransition实现了将控制器的视图推入屏幕的动画效果
属性解析:
type:动画过渡类型
subtype:动画过渡方向
startprogress:动画起点(在整体动画的百分比)
endprogress:动画终点(在整体动画的百分比)
uiview动画
uikit直接将动画集成到uiview类中,当内部的一些属性发生改变时,uiview将为这些改变提供动画支持
执行动画所需要的工作由uiview类自动完成,但仍要在希望执行动画时通知视图,为此需要将改变属性的代码放在[uiview beginanimations:nil context:nil]和[uiview commitanimations]之间
常见方法解析:
+ (void)setanimationdelegate:(id)delegate
设置动画代理对象,当动画开始或者结束时会发消息给代理对象
+ (void)setanimationwillstartselector:(sel)selector
当动画即将开始时,执行delegate对象的selector,并且把beginanimations:context:中传入的参数传进selector
+ (void)setanimationdidstopselector:(sel)selector
当动画结束时,执行delegate对象的selector,并且把beginanimations:context:中传入的参数传进selector
+ (void)setanimationduration:(nstimeinterval)duration
动画的持续时间,秒为单位
+ (void)setanimationdelay:(nstimeinterval)delay
动画延迟delay秒后再开始
+ (void)setanimationstartdate:(nsdate *)startdate
动画的开始时间,默认为now
+ (void)setanimationcurve:(uiviewanimationcurve)curve
动画的节奏控制,具体看下面的”备注”
+ (void)setanimationrepeatcount:(float)repeatcount
动画的重复次数
+ (void)setanimationrepeatautoreverses:(bool)repeatautoreverses
如果设置为yes,代表动画每次重复执行的效果会跟上一次相反
+ (void)setanimationtransition:(uiviewanimationtransition)transition forview:(uiview *)view cache:(bool)cache
设置视图view的过渡效果, transition指定过渡类型, cache设置yes代表使用视图缓存,性能较好
block动画
+ (void)animatewithduration:(nstimeinterval)duration delay:(nstimeinterval)delay options:(uiviewanimationoptions)options animations:(void (^)(void))animations completion:(void (^)(bool finished))completion
参数解析:
duration:动画的持续时间
delay:动画延迟delay秒后开始
options:动画的节奏控制
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
+ (void)transitionwithview:(uiview *)view duration:(nstimeinterval)duration options:(uiviewanimationoptions)options animations:(void (^)(void))animations completion:(void (^)(bool finished))completion
参数解析:
duration:动画的持续时间
view:需要进行转场动画的视图
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
+ (void)transitionfromview:(uiview *)fromview toview:(uiview *)toview duration:(nstimeinterval)duration options:(uiviewanimationoptions)options completion:(void (^)(bool finished))completion
方法调用完毕后,相当于执行了下面两句代码:
// 添加toview到父视图
[fromview.superview addsubview:toview]; 
// 把fromview从父视图中移除
[fromview.superview removefromsuperview];
参数解析:
duration:动画的持续时间
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
uiimageview的帧动画
uiimageview可以让一系列的图片在特定的时间内按顺序显示
相关属性解析:
animationimages:要显示的图片(一个装着uiimage的nsarray)
animationduration:完整地显示一次animationimages中的所有图片所需的时间
animationrepeatcount:动画的执行次数(默认为0,代表无限循环)
相关方法解析:
- (void)startanimating; 开始动画
- (void)stopanimating;  停止动画
- (bool)isanimating;  是否正在运行动画
uiactivityindicatorview
是一个旋转进度轮,可以用来告知用户有一个操作正在进行中,一般用initwithactivityindicatorstyle初始化
方法解析:
- (void)startanimating; 开始动画
- (void)stopanimating;  停止动画
- (bool)isanimating;  是否正在运行动画
uiactivityindicatorviewstyle有3个值可供选择:
uiactivityindicatorviewstylewhitelarge   //大型白色指示器    
uiactivityindicatorviewstylewhite      //标准尺寸白色指示器    
uiactivityindicatorviewstylegray    //灰色指示器,用于白色背景
其它类似信息

推荐信息