CoreAnimation

核心动画继承结构

核心动画继承结构

注意:核心动画中的虚类不能使用,而应该使用他们子类中的实类。

Core Animation的使用步骤

如果是Xcode6之前的版本,要导入<QuartzCore/QuartzCore.h>框架(并不存在什么CoreAnimation 框架)

开发步骤:

  1. 首先得有CALayer(因为CoreAnimation是作用在CALayer上的)

  2. 初始化一个CAAnimation对象,并设置一些动画相关属性

  3. 通过调用CALayer的addAnimation:forKey:方法,增加CAAnimation对象到CALayer中,这样就能开始执行动画了

  4. 通过调用CALayer的removeAnimationForKey:方法可以停止CALayer中的动画

CAAnimation中的一些属性:

  • duration:动画的持续时间

  • repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT

  • repeatDuration:重复时间

  • removedOnCompletion默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过*还要设置fillMode为kCAFillModeForwards*

  • beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间

  • timingFunction:速度控制函数,控制动画运行的节奏

  • delegate:动画代理

  • fillMode决定当前对象在非active时间段的行为。(要想fillMode有效,最好设置removedOnCompletion = NO)

    • kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态

    • kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
      kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。

    • kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态

  • CAMediaTimingFunction:速度控制函数

    • kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉

    • kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开

    • kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地

    • kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

CAAnimation代理方法

CAAnimation在分类中定义了代理方法。是给NSObject添加的分类,所以任何对象,成为CAAnimation的代理,都可以。

  • 动画开始的时候调用

    - (void)animationDidStart:(CAAnimation *)anim;

  • 动画停止的时候调用

    - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

CALayer上动画的暂停和恢复

  • 暂停

    -(void)pauseLayer:(CALayer*)layer{CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; // 让CALayer的时间停止走动 layer.speed = 0.0; // 让CALayer的时间停留在pausedTime这个时刻 layer.timeOffset = pausedTime; } 
  • 恢复

    -(void)resumeLayer:(CALayer*)layer{CFTimeInterval pausedTime = layer.timeOffset;// 1. 让CALayer的时间继续行走 layer.speed = 1.0; // 2. 取消上次记录的停留时刻 layer.timeOffset = 0.0; // 3. 取消上次设置的时间 layer.beginTime = 0.0; // 4. 计算暂停的时间(这里也可以用CACurrentMediaTime()-pausedTime) CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; // 5. 设置相对于父坐标系的开始时间(往后退timeSincePause) layer.beginTime = timeSincePause; } 

CABasicAnimation——基本动画

  • 基本动画,是CAPropertyAnimation的子类

  • 属性说明:

    • keyPath :要改变的属性名称(传字符串)

    • fromValue:keyPath相应属性的初始值

    • toValue:keyPath相应属性的结束值

  • 动画过程说明:

    • 随着动画的进行,在长度为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地变为toValue

    • keyPath内容是CALayer的可动画Animatable属性

    • 如果fillMode=kCAFillModeForwards同时removedOnComletion=NO,那么在动画执行完毕后,图层会保持显示动画执行后的状态。但在实质上,图层的属性值还是动画执行前的初始值,并没有真正被改变。

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

  • CATransitionCAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点
    UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果

  • 动画属性:

    • type:动画过渡类型
    • subtype:动画过渡方向
    • startProgress:动画起点(在整体动画的百分比)
    • endProgress:动画终点(在整体动画的百分比)

1. 单视图

+ (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

2. 双视图

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void (^)(BOOL finished))completion;

  • 参数说明:

    • duration:动画的持续时间
    • options:转场动画的类型
    • animations:将改变视图属性的代码放在这个block中
    • completion:动画结束后,会自动调用这个block

3. 自己写转场

  • 创建转场动画:[CATransition animation]
  • 设置动画属性值
  • 添加到需要转场动画的图层上 [layer addAnimation:animation forKey:nil]

转场动画的类型(NSString *type)

  • fade : 交叉淡化过渡

  • push : 新视图把旧视图推出去

  • moveIn: 新视图移到旧视图上面

  • reveal: 将旧视图移开,显示下面的新视图

  • cube : 立方体翻滚效果

  • oglFlip : 上下左右翻转效果

  • suckEffect : 收缩效果,如一块布被抽走

  • rippleEffect: 水滴效果

  • pageCurl : 向上翻页效果

  • pageUnCurl : 向下翻页效果

  • cameraIrisHollowOpen : 相机镜头打开效果

  • cameraIrisHollowClos : 相机镜头关闭效果

转场动画的方向(NSString *subtype)

  • 从某个方向开始:fromLeftfromRightfromTop ,fromBottom

CoreAnimation中的CALayer

1. CAReplicatorLayer:复制图层

顾名思义,复制图层就是用来复制的。它会将自己的子图层进行复制,连同子layer上的动画会一起复制。

  • 属性说明:

    • instanceCount :复制份数。(会把原始的子图层复制多少份,包括原来的一份)

    • instanceTransform:形变。每一份相对上一份的形变量

    • instanceDelay :每一份相对上一份的时间延迟。

  • 修改CAReplicatorLayer的颜色通道,可以改变CAReplicatorLayer的显示的样式

    • @property float instanceRedOffset;
    • @property float instanceGreenOffset;
    • @property float instanceBlueOffset;
    • @property float instanceAlphaOffset;

2. CAShapeLayer:形状图层

根据形状,绘制内容的图层

  • 属性说明:

    • path:描述形状的路径。默认会把路径封闭,然后填充。

    • fillColor :填充的颜色

    • strokeColor:描边的颜色(如果想仅仅只描边的话,就把fillColor设为clearcolor就好)

    • strokeStart:开始描边的比例【0-1】

    • strokeEnd:结束描边的比例【0-1】

3. CAGradientLayer:渐变图层

用这个图层,可以做颜色的渐变

  • 属性说明:

    • colors :保存所有渐变的颜色,里面是CGColorRef,记得用id,让编译器以为数组里面的是OC对象。

    • locations :保存所有渐变的位置【0-1】

    • startPoint:开始渐变的点【0-1】

    • endPoint:结束渐变的点【0-1】

最后:

  • 核心动画给我们展示的只是一个假象,layer的的frame、bounds、position并不会在动画完毕之后发生改变。

  • UIView封装的动画,会使会真实修改view的一些属性。

转载于:https://www.cnblogs.com/PLA-Artillery/p/5828556.html

CoreAnimation汇总相关推荐

  1. iphone开发资源汇总

    小牛,大牛们注意了,soho社区已成立,欢迎入住切磋技艺. 不知道小牛大牛们是否有这样的梦想,在浩瀚无际的网络中,总梦想着有那么一块纯净的属于技术人员的沃土,在这儿我们可以一起交流,一起学习,一起见证 ...

  2. IOS开发之----资源汇总

    学习过程当中查找到的资料,做一个记录,以便更多朋友查看. 开发的过程有时候是简单的,因为我们可以站在巨人的肩上,跳得更高,走得更远. 如何用Facebook graphic api上传视频: http ...

  3. iOS 的一些资源汇总

    UI界面类项目: Panoramagl -- 720全景展示 Panorama viewer library for iPhone, iPad and iPod touch MBProgressHUD ...

  4. iphone开发资源汇总(二)

    如何用Facebook graphic api上传视频: http://developers.facebook.com/blog/post/532/ Keychain保存数据封装: https://g ...

  5. 最常见NLP任务练手项目汇总

    分词 Word Segmentation chqiwang/convseg ,基于CNN做中文分词,提供数据和代码. 词预测 Word Prediction Kyubyong/word_predict ...

  6. 用python下载文件的若干种方法汇总

    压缩文件可以直接放到下载器里面下载的 you-get 连接 下载任意文件 重点 用python下载文件的若干种方法汇总 写文章 用python下载文件的若干种方法汇总 zhangqibot发表于Met ...

  7. 命名实体识别训练集汇总(一直更新)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/leitouguan8655/artic ...

  8. LeetCode简单题之汇总区间

    题目 给定一个 无重复元素 的 有序 整数数组 nums . 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 .也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范 ...

  9. 2021年全网最详细大数据常见端口汇总❤️【建议收藏】❤️

    目录 大数据常见端口汇总 一.Hadoop 二.Zookeeper 三.Hbase 四.Hive 五.Spark 六.Kafka 七.Flink 八.Flume 九.Redis 十.CDH 十一.HU ...

最新文章

  1. 昨日,全球股市进入ICU!89岁股神巴菲特惊叹活久见!苹果微软万亿美金市值摇摇欲坠...
  2. python3安装第三方库教程
  3. android sp wp实例,android sp wp详解
  4. 第四十三篇 面向对象进阶2
  5. 计算机受限制用户,由于该计算机受到限制,本次操作已被取消的解决办法
  6. JavaScript 键盘事件处理
  7. iPhone如何截长图?iPhone长截图教程
  8. 企业信息化政务信息化浙里办
  9. 液晶驱动原理 c语言,基于STM8S的LCD驱动电路和LCD显示原理分析
  10. 如何用photoshop做24色环_【PS教你快速绘制超漂亮的色环】 24色环图绘制
  11. 【CV】MLP-Mixer:用于CV任务的全 MLP 架构
  12. CF gym Coins(01背包计数)
  13. 青青日记app界面原型
  14. lempel ziv算法c语言,数学之路-python计算实战(4)-Lempel-Ziv压缩(2)(示例代码)
  15. ADOConnection 打开EXCEL
  16. 记一次jenkins 构建go项目经历
  17. 2021年职业病防治法宣传周宣传资料
  18. 如何与其他用户共享SkyBell HD访问
  19. html预览pdf文件
  20. Microsoft Project 2010 设置子任务

热门文章

  1. 2018值得一看的GAN论文回顾
  2. 编程心得体会_生信编程语言的经验之谈
  3. 学规划或GIS需要安装的软件
  4. python gil原理_Python GIL深入浅出
  5. huffman图像编码C语言,Huffman编码的c语言实现
  6. python 自动获取所有设备信息-使用Python脚本来获取Cisco设备信息的示例
  7. jQuery获取URL参数
  8. Fiddler如何查找登陆的可用cookie用于其他请求?方式一
  9. 自动化安装DHCP配置脚本
  10. Junit4单元测试报错