CoreAnimation的使用小结
2015-07-19 11:02
459 查看
参考:
http://www.cnblogs.com/wendingding/p/3801157.html http://www.cnblogs.com/wendingding/p/3802830.html
切记动画的执行,是必须要按你想点击后操作开始执行的,如果是想push,那么就在其前做好动画,如果是要点击事件执行动画,就要在点击事件中添加要达到的效果。
执行动画,就是将要修改的属性封装到动画中去执行
CAAnimation是根据CALayer进行处理操作的;
当[layer addAnimation:anim forKey:@“”]; 执行后,动画就开始执行了,所以要在其中添加将要达到的效果即可。
对于 基本动画,如果是结构体需要使用NSValue进行转换,但如果不是就可以直接使用,记得要转成id类型,可使用 @(); 这种方式来转换。
所有的CAAnimation对象实现这个CAAction协议,并且当一个图层属性发生改变时,这个动画便会执行。动画属性是动作的一种类型,你可以用几乎所有你想用的动作类型去定义一个动作。然后你需要去定义一个动作对象,然后将其与你的app图层连接起来。
核心动画都是针对图层来说的,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。要注意的是, Core Animation是直接作用在CALayer上的,并非UIView。
2. 初始化一个CAAnimation对象,并设置一些动画相关属性,添加图层想要达到的动画后的结果
3. 通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了(此方法进行动画的触发)
4. 通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画
CATransition
type的常见量值:
常见的子类有:
CAMediaTiming(协议)
CAAnimation:
CAPropertyAnimation:(不能直接使用,使用其子类)
CABasicAnimation(可以)
CAKeyframeAnimation(可以)
CATransition(可以)
CAAnimationGroup(可以)
(同一颜色代表同一层级)
说明:1 > 能用的动画类只有4个子类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup
2 > CAMediaTiming是一个协议(protocol)
CAPropertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation
它有个NSString类型的keyPath属性, 可通过指定CALayer的某个属性名为keyPath,并对比CALayer的这个属性的值进行修改,达到相应的动画效果。比如:指定@“position”为keyPath,就是修改CALayer的position属性的值,以达到平移的动画效果
常见的属性有:
duration:动画的持续时间
repeatCount:动画的重复次数
timingFunction:控制动画运行的节奏
补充:所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它的具体子类:属性解析:(有>代表来自CAMediaTiming协议的属性)
duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前,动画结束之后。
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime() + 2, CACurrentMediaTime()为图层当前的时间。
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理
如果想执行完成后保持最新的动态需要添加两个:
UIView封装的动画与CALayer动画的对比:
使用UIView和CALayer都能实现动画效果,但是在真实在开发中,一般还是主要使用UIView封装的动画,而很少使用CALayer的动画。
CALayer核心动画与UIView动画的区别:
UIView封装的动画执行完毕之后不会反弹,即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。(这个实际位置指的是什么东西,假象又是什么)
参数解析:
duration:动画的持续时间
delay:动画延迟delay秒后开始
options:动画的节奏控制
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
参数解析:
duration:动画的持续时间
view:需要进行转场动画的视图
options:转场动画的类型
animations:将改变视图属性的代码放在这个block中
completion:动画结束后,会自动调用这个block
参数解析:与上一个相似
方法调用完毕后,相当于执行了下面两句代码:
相关属性解析:
animationImages:要显示的图片(一个装着UIImage的NSArray)
animationDuration:完整地显示一次animationImages中的所有图片所需的时间
animationRepeatCount:动画的执行次数(默认为0,代表无限循环)
相关方法解析:
方法解析:
http://www.cnblogs.com/wendingding/p/3801157.html http://www.cnblogs.com/wendingding/p/3802830.html
切记动画的执行,是必须要按你想点击后操作开始执行的,如果是想push,那么就在其前做好动画,如果是要点击事件执行动画,就要在点击事件中添加要达到的效果。
执行动画,就是将要修改的属性封装到动画中去执行
CAAnimation是根据CALayer进行处理操作的;
当[layer addAnimation:anim forKey:@“”]; 执行后,动画就开始执行了,所以要在其中添加将要达到的效果即可。
对于 基本动画,如果是结构体需要使用NSValue进行转换,但如果不是就可以直接使用,记得要转成id类型,可使用 @(); 这种方式来转换。
所有的CAAnimation对象实现这个CAAction协议,并且当一个图层属性发生改变时,这个动画便会执行。动画属性是动作的一种类型,你可以用几乎所有你想用的动作类型去定义一个动作。然后你需要去定义一个动作对象,然后将其与你的app图层连接起来。
核心动画都是针对图层来说的,Core Animation的动画执行过程都是在后台操作的,不会阻塞主线程。要注意的是, Core Animation是直接作用在CALayer上的,并非UIView。
Core Animation的使用步骤:
1. 使用它需要先添加QuartzCore.framework框架和引入主头文件<QuartzCore/QuartzCore.h>(iOS7不需要)2. 初始化一个CAAnimation对象,并设置一些动画相关属性,添加图层想要达到的动画后的结果
3. 通过调用CALayer的addAnimation:forKey:方法增加CAAnimation对象到CALayer中,这样就能开始执行动画了(此方法进行动画的触发)
4. 通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画
CATransition
type的常见量值:
/* 过渡效果 fade //交叉淡化过渡(不支持过渡方向) kCATransitionFade push //新视图把旧视图推出去 kCATransitionPush moveIn //新视图移到旧视图上面 kCATransitionMoveIn reveal //将旧视图移开,显示下面的新视图 kCATransitionReveal cube //立方体翻滚效果 oglFlip //上下左右翻转效果 suckEffect //收缩效果,如一块布被抽走(不支持过渡方向) rippleEffect //滴水效果(不支持过渡方向) pageCurl //向上翻页效果 pageUnCurl //向下翻页效果 cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向) cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向) */
/* subtype过渡方向 kCATransitionFromRight kCATransitionFromLeft kCATransitionFromBottom kCATransitionFromTop */CATransition的使用
CATransition *anim = [CATransition animation]; anim.type = @“cube”; // 动画过渡类型 anim.subtype = kCATransitionFromTop; // 动画过渡方向 anim.duration = 1; // 动画持续1s // 代理,动画执行完毕后会调用delegate的animationDidStop:finished: anim.delegate = self; /*******中间穿插改变layer属性的代码**********/ #重要不可错位 [layer addAnimation:anim forKey:nil];CAAnimation是所有动画类的父亲,但是它不能直接使用,应该使用其子类。
常见的子类有:
CAMediaTiming(协议)
CAAnimation:
CAPropertyAnimation:(不能直接使用,使用其子类)
CABasicAnimation(可以)
CAKeyframeAnimation(可以)
CATransition(可以)
CAAnimationGroup(可以)
(同一颜色代表同一层级)
说明:1 > 能用的动画类只有4个子类:CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup
2 > CAMediaTiming是一个协议(protocol)
CAPropertyAnimation是CAAnimation的子类,但是不能直接使用,要想创建动画对象,应该使用它的两个子类:CABasicAnimation和CAKeyframeAnimation
它有个NSString类型的keyPath属性, 可通过指定CALayer的某个属性名为keyPath,并对比CALayer的这个属性的值进行修改,达到相应的动画效果。比如:指定@“position”为keyPath,就是修改CALayer的position属性的值,以达到平移的动画效果
常见的属性有:
duration:动画的持续时间
repeatCount:动画的重复次数
timingFunction:控制动画运行的节奏
补充:所有动画对象的父类,负责控制动画的持续时间和速度,是个抽象类,不能直接使用,应该使用它的具体子类:属性解析:(有>代表来自CAMediaTiming协议的属性)
duration:动画的持续时间
repeatCount:动画的重复次数
repeatDuration:动画的重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前,动画结束之后。
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime() + 2, CACurrentMediaTime()为图层当前的时间。
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理
如果想执行完成后保持最新的动态需要添加两个:
// 设置动画执行完毕后不删除动画 anim.removeOnCompletion = NO;
// 设置保存动画的最新状态 anim.fillMode = kCAFillModeForwards;
UIView封装的动画与CALayer动画的对比:
使用UIView和CALayer都能实现动画效果,但是在真实在开发中,一般还是主要使用UIView封装的动画,而很少使用CALayer的动画。
CALayer核心动画与UIView动画的区别:
UIView封装的动画执行完毕之后不会反弹,即如果是通过CALayer核心动画改变layer的位置状态,表面上看虽然已经改变了,但是实际上它的位置是没有改变的。(这个实际位置指的是什么东西,假象又是什么)
block动画
1.简单说明
+ (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
2.转场动画
+ (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 removeFromSuperview];提示:self.customView.layer.position和self.customView.center等价,因为position的默认值为(0.5,0.5)。
补充
1.UIImageView的帧动画
UIImageView可以让一系列的图片在特定的时间内按顺序显示相关属性解析:
animationImages:要显示的图片(一个装着UIImage的NSArray)
animationDuration:完整地显示一次animationImages中的所有图片所需的时间
animationRepeatCount:动画的执行次数(默认为0,代表无限循环)
相关方法解析:
- (void)startAnimating; 开始动画 - (void)stopAnimating; 停止动画 - (BOOL)isAnimating; 是否正在运行动画
2.UIActivityIndicatorView
是一个旋转进度轮,可以用来告知用户有一个操作正在进行中,一般用initWithActivityIndicatorStyle初始化方法解析:
- (void)startAnimating; 开始动画 - (void)stopAnimating; 停止动画 - (BOOL)isAnimating; 是否正在运行动画UIActivityIndicatorViewStyle有3个值可供选择:
UIActivityIndicatorViewStyleWhiteLarge //大型白色指示器 UIActivityIndicatorViewStyleWhite //标准尺寸白色指示器 UIActivityIndicatorViewStyleGray //灰色指示器,用于白色背景
相关文章推荐
- Hadoop—MapReduce进行数据查询和实现推简单荐系统---练习7
- 记录一下cocos2d-x——开发环境安装
- 团购(cell高度相同时自定义cell)
- [LeetCode][Java] Remove Duplicates from Sorted List
- 关于eclipse安装Genymotion插件的方法
- 用矩阵键盘使数码管显示不同的值
- 经典的排序算法
- 专题:01分数规划
- 3.hibernate基础配置
- 关于cocoapods一些错误的解决问
- OpenCV Access pixel value
- hasse数列
- 发送邮件
- POJ 3352 Road Construction (边双连通分量 Tarjan缩点)
- QT 环境的搭建
- busybox的作用和功能
- java学习之旅64--常用类_自动装箱和拆箱_缓存处理
- boost::implicit_cast
- 《JAVA 核心技术 基础知识》第三章 笔记
- MySql优化--系统配置优化和硬件优化