CoreAnimation的使用小结
參考:
http://www.cnblogs.com/wendingding/p/3801157.htmlhttp://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 //灰色指示器,用于白色背景
CoreAnimation的使用小结的更多相关文章
- 从零开始编写自己的C#框架(26)——小结
一直想写个总结,不过实在太忙了,所以一直拖啊拖啊,拖到现在,不过也好,有了这段时间的沉淀,发现自己又有了小小的进步.哈哈...... 原想框架开发的相关开发步骤.文档.代码.功能.部署等都简单的讲过了 ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- java单向加密算法小结(2)--MD5哈希算法
上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...
- iOS--->微信支付小结
iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...
- iOS 之UITextFiled/UITextView小结
一:编辑被键盘遮挡的问题 参考自:http://blog.csdn.net/windkisshao/article/details/21398521 1.自定方法 ,用于移动视图 -(void)mov ...
- K近邻法(KNN)原理小结
K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用.比如,我们判断一个人的人品,只需要观察他来往最密切的几个人的人品好坏就可以得出 ...
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- Bagging与随机森林算法原理小结
在集成学习原理小结中,我们讲到了集成学习有两个流派,一个是boosting派系,它的特点是各个弱学习器之间有依赖关系.另一种是bagging流派,它的特点是各个弱学习器之间没有依赖关系,可以并行拟合. ...
- scikit-learn 梯度提升树(GBDT)调参小结
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
随机推荐
- Python的程序结构[4] -> 函数/Function[2] -> 匿名函数
匿名函数 / Anonymous Function 匿名函数是一种不需要绑定函数名的函数 (i.e. functions that are not bound to a name).匿名函数通过 la ...
- 1424 零树 (树形DP)
1424 零树 题意 给出一棵树,每次可以选择一个包含节点 1 的连通块,将所有的节点的权值同时加 1 或减 1 ,问最少多少次操作使所有节点权值变为 0 . 分析 这种题意简单的题目好处就是能很快知 ...
- HNOI2004 郁闷的出纳员(Splay)
郁闷的出纳员 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的 ...
- JAVA RandomAccessFile writeBytes
writeBytes public final void writeBytes(String s) throws IOException 按字节序列将该字符串写入该文件.该字符串中的每个字符均按顺序写 ...
- luogu P1182 数列分段Section II
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小. 关于最大值最小: 例如一数列4 2 4 5 1要分成3段 将其如下分段: [4 ...
- [BZOJ 2547] 玩具兵
Link: BZOJ 2547 传送门 Solution: 很容易通过解可行性的单调性想到二分答案,接下来考虑如何验证解 发现一个很奇妙的条件:步兵和骑兵的个数相同 因此交换位置时不用考虑可行性,保证 ...
- 【bzoj2190】【仪仗队】欧拉函数+线性筛(浅尝ACM-J)
向大(hei)佬(e)势力学(di)习(tou) Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪 ...
- 如何获取Class的所有方法
// 取得所有方法 Method[] hideMethod =Activity.class.getMethods(); int i = 0; for (; i < hideMethod.leng ...
- 程序编译时书写Makefile注意事项一例
在进行程序编译时,可能需要指定一些库的库的路径.头文件的路径,分别使用的参数选项是-L和-I,需要注意的是: 需要确保-L和-I后边的内容不为空,否则会出现意想不到的错误,而这种错误比较难以发现,引起 ...
- threadlocal彻底理解
如果你定义了一个单实例的java bean,它有若干属性,但是有一个属性不是线程安全的,比如说HashMap.并且碰巧你并不需要在不同的线程中共享这个属性,也就是说这个属性不存在跨线程的意义.那么你不 ...