博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CoreAnimation的使用小结
阅读量:5154 次
发布时间:2019-06-13

本文共 4987 字,大约阅读时间需要 16 分钟。

參考:
切记动画的运行。是必须要按你想点击后操作開始运行的,假设是想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     //交叉淡化过渡(不支持过渡方向) kCATransitionFadepush     //新视图把旧视图推出去  kCATransitionPushmoveIn   //新视图移到旧视图上面   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    //灰色指示器,用于白色背景

转载于:https://www.cnblogs.com/llguanli/p/8655800.html

你可能感兴趣的文章
pytorch中的forward前向传播机制
查看>>
课后作业-阅读任务-阅读提问-4
查看>>
Delphi 深入浅出VCL(2)-TObject所有对象的根
查看>>
配置IIS虚拟目录遇到的5个问题
查看>>
2-03顺序表的操作
查看>>
耿丹CS16-2班第一次作业汇总
查看>>
查看mysql表大小
查看>>
命令行程序测试自动化
查看>>
My Blog
查看>>
array_reduce() 与 array_map()
查看>>
SASS实现代码的重用:混合器Mixin、继承
查看>>
《windows核心编程系列》三谈谈内核对象及句柄的本质
查看>>
Linux下安装maven
查看>>
使用OpenMP实现并行归并排序(Report)
查看>>
转:【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量...
查看>>
linux nohup【转】
查看>>
SQL语句优化
查看>>
校验银行卡号是否符合Luhn算法及生成符合Luhn算法的银行卡号
查看>>
MFC 双缓冲加载背景
查看>>
记录自己最近的学习状态
查看>>