>

核心动画的继承关系图.png,所以在了解Core Anim

- 编辑:澳门博发娱乐官网 -

核心动画的继承关系图.png,所以在了解Core Anim

CATransition——转场动画

  • 简介:
    • CATransitionCAAnimation的子类,用于做转场动画,可感到层提供移出荧屏和移入显示屏的卡通片效果。iOS比Mac OS X的转场动画效果少一些
  • UINavigationController即便经过`CATransition达成将调整器的视图推入荧屏的卡通效果
  • 动画片属性:
    • type:动画过渡类型
    • subtype:动画过渡方向
    • startProgress:动画起源(在完全动画的百分比)
    • endProgress:动画终点(在完整动画的比重)
  • 代码达成思路与步骤:

    • 注意点
      • 只要切换分界面 都足以使用转场动画
      • 何人切换分界面 就增添到何人上
      • 转场动画代码必需和界面切换的代码放在一齐
    • 1.写分界面切换的代码
    //设置在touchBegin方法中static int i = 2;NSString *imageName = [NSString stringWithFormat:@"%d",i];_imageView.image = [UIImage imageNamed:imageName];i++;`
    
    • 2.开头化转场动画CATransition *anim = [CATransition animation];
    • 3.点名转场类型(其余样式见过度效果)anim.type = @"pageCurl";
    • 4.安装转场动画属性
      • 安装动画开首的快慢anim.startProgress = 0.5;
      • 安装动画结束的快慢anim.endProgress = 0.8;
      • 设置动画的光阴anim.duration = 3;
    • 5.增加转场动画到图层[_imageView.layer addAnimation:anim forKey:nil];

CAAnimation——简介

  • 是有着动画对象的父类,担负调节动画的持续时间和速度,是个抽象类,不可能一向利用,应该使用它有血有肉的子类
  • 属性表明:(法国红表示来自CAMediaTiming协商的习性)
duration:动画的持续时间
repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT
repeatDuration:重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理

CALayer上动画的中断和卷土重来

#pragma mark 暂停CALayer的动画
-(void)pauseLayer:(CALayer*)layer
{
    CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];

    // 让CALayer的时间停止走动
      layer.speed = 0.0;
    // 让CALayer的时间停留在pausedTime这个时刻
    layer.timeOffset = pausedTime;
}

#pragma mark 恢复CALayer的动画
-(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;
}

2. CAAnimationGroup

  • 动画片组,是CAAnimation的子类,可以保留一组动画对象,将CAAnimationGroup对象参预层后,组中全部动画对象能够同不经常间出现运营

  • 个性表达:

    • animations:用来保存一组动画对象的NSArray
    • 默许意况下,一组动画对象是同不时间运维的,也能够透过安装动画对象的begin提姆e属性来更改动画的起来时间

主导动画的继续关系图.png

CADisplayLink定时器

  • CADisplayLink是一种以显示屏刷新频率触发的石英表机制,每分钟试行差十分少58次左右,能够暂停CADisplayLink定时器

  • CADisplayLink是七个沙漏,能够使绘图代码与视图的基础代谢频率保持同步,而NSTimer无法保险机械漏刻实际被触发的规范时间,无法暂停

  • 使用方法:

    • 定义CADisplayLink并制定触发调用方法
    • 将显得链接加多到主运维循环队列
  • 代码完毕步骤:

    • 1.是因为计时器只需求创建一遍,因而定义为成员属性@property (nonatomic, weak) CADisplayLink *link;
    • 2.利用懒加载link属性
     - (CADisplayLink *)link { if (_link == nil) { //定义CADisplayLink并制定触发调用方法 CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(timeChange)]; _link = link; //加到主运行循环队列 [_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; } return _link; }
    
    • 3.实现触发调用方法

      // 1秒调用60次 每次旋转45 / 60.0度- timeChange{ _wheelView.transform = CGAffineTransformRotate(_wheelView.transform, (45 / 60.0) / 180.0 * M_PI);}
      
    • 4.展开电火花计时器self.link.paused = NO;

  • 附:示例德姆o地址,希望点个⭐️Star。thx☺

CADisplayLink

  • CADisplayLink是一种以荧屏刷新频率触发的时钟机制,每分钟试行大约五15次左右
  • CADisplayLink是八个电磁照看计时器,能够使绘图代码与视图的刷新频率保持同步,而NSTimer无法确认保障放大计时器实际被触发的标准时间
  • 动用情势:
    • 定义CADisplayLink并成立触发调用方法
    • 将显示链接增多到主运营循环队列

Core Animation结构

图片 1

三翻五次关系

其古铜浅浅米灰虚线表示继续关系,浅莲红表示依据左券。

基本动画中兼有类都服从CAMediaTiming公约。
CAAnaimation是个抽象类,不具备动画效果,必需用它的子类才有动画效果。

CAAnimationGroup和CATransition才有动画效果,CAAnimationGroup是个卡通组,可以并且张开缩放,旋转(同期扩充两个卡通)。

CATransition是转场动画,界面之间跳转(切换)都得以用转场动画。

CAPropertyAnimation也是个抽象类,本身不抱有动画效果,唯有子类才有。

CABasicAnimation和CAKeyframeAnimation:
CABasicAnimation基本动画,做一些回顾意义。
CAKeyframeAnimation帧动画,做一些连连的余音绕梁的卡通片。

  • Core Animation的动画片实施进度都以在后台操作的,不会堵塞主线程
  • Core Animation是直接成效在CALayer上的,并不是UIView

一、基本动画

CABasicAnimation

天性表达:
fromValue:keyPath相应属性的早先值
toValue:keyPath相应属性的了断值

卡通进度表明
趁着动画的进展,在长短为duration的持续时间内,keyPath相应属性的值从fromValue渐渐地成为toValue
keyPath剧情是CALayer的可动画Animatable属性
如果fillMode = kCAFillModeForwards同时removedOnComletion = NO,那么在动画施行完毕后,图层会维持展现动画执行后的图景。但在真相上,图层的属性值还是动画实践前的初叶值,并尚未真的被改造

    //例一:平移效果
    CABasicAnimation * ba = [CABasicAnimation animation];
    ba.keyPath = @"transform.translation.x";
    ba.fromValue = @0;
    ba.toValue = @200;

    ba.duration = 3.0;

    ba.fillMode = kCAFillModeBoth;
    ba.removedOnCompletion = NO;

    [self.orangeView.layer addAnimation:ba forKey:nil];

    //例二:心跳效果
    CABasicAnimation * ba = [CABasicAnimation animation];
    ba.keyPath = @"transform.scale";
    ba.toValue = @0;
    ba.duration = 0.6;
    ba.repeatCount = MAXFLOAT;
    ba.autoreverses = YES;
    [self.imageView.layer addAnimation:ba forKey:nil];

CAAnimationGroup——动画组

  • 简介

    • 动画组,是CAAnimation的子类,可以保留一组动画对象,将CAAnimationGroup指标参预层后,组中全部动画对象足以同时并发运行
  • 性情表达:

    • animations:用来保存一组动画对象的NSArray私下认可情形下,一组动画对象是同一时候运维的,也能够经过设置动画对象的beginTime质量来更改换画的启幕时间

Core Animation的行使手续

  • 要是还是不是xcode5之后的版本,使用它供给先增加QuartzCore.framework和引进对应的框架<QuartzCore/QuartzCore.h>
  • 付出步骤:
    • 1.率先得有CALayer
    • 2.开首化二个CAAnimation对象,并安装有个别动画相关属性
    • 3.通过调用CALayer的addAnimation:forKey:方法,扩充CAAnimation对象到CALayer中,这样就能够开端实行动画了
    • 4.通过调用CALayer的removeAnimationForKey:方法能够告一段落CALayer中的动画

CAKeyframeAnimation——关键帧动画

重中之重帧动画,也是CAPropertyAnimation的子类,与CABasicAnimation的区别是:

  • CABasicAnimation只可以从二个数值(fromValue)变到另贰个数值(toValue),而CAKeyframeAnimation会采纳一个NSArray保存这个数值
  • CABasicAnimation可看做是唯有2个关键帧的CAKeyframeAnimation

属性表明:

属性 说明
values NSArray对象。里面的元素称为“关键帧”(keyframe)。动画对象会在指定的时间(duration)内,依次显示values数组中的每一个关键帧
path 可以设置一个CGPathRef、CGMutablePathRef,让图层按照路径轨迹移动。path只对CALayer的anchorPoint和position起作用。如果设置了path,那么values将被忽略
keyTimes 可以为对应的关键帧指定对应的时间点,其取值范围为0到1.0,keyTimes中的每一个时间值都对应values中的每一帧。如果没有设置keyTimes,各个关键帧的时间是平分的

Core Animation,中文翻译为主干动画,它是一组极度强大的卡通片管理API,使用它能做出十一分灿烂的卡通效果,并且屡次一箭双雕.也便是说,使用少许的代码就足以兑现丰盛有力的功用.

图片 2

  • 附:示例Demo地址,希望点个⭐️Star。thx☺

CABasicAnimation——基本动画

  • 主导动画,是CAPropertyAnimation的子类

  • 属性表达:

    • fromValue:key帕特h相应属性的初步值
    • toValue:keyPath相应属性的结束值
  • 动画进度表明:

    • 乘势动画的拓展,在尺寸为duration的持续时间内,keyPath相应属性的值从fromValue稳步地改成toValue
    • keyPath内容是CALayer的可动画Animatable属性
    • 尽管fillMode=kCAFillModeForwards相同的时候removedOnComletion=NO,那么在动画实行达成后,图层会保持展现动画实践后的气象。但在精神上,图层的属性值依旧动画实践前的起首值,并未当真被改造。

 

Core Animation

图片 3

Core Animation结构图

  • 着力动画中持有类都遵从CAMediaTiming
  • CAAnaimation是个抽象类,不享有动画效果,必需用它的子类才有动画效果
  • CAAnimationGroup和CATransition才有动画效果
    • CAAnimationGroup是个卡通组,能够同偶然间开展缩放,旋转。
    • CATransition是转场动画,分界面之间跳转都得以用转场动画。
  • CAPropertyAnimation也是个抽象类,本人不具有动画效果,唯有子类才有

    • CABasicAnimation和CAKeyframeAnimation

      1. CABasicAnimation基本动画,做一些轻松易行意义
      • CAKeyframeAnimation帧动画,做一些连连的通畅的动画片

开荒步骤

一经不是xcode5之后的版本,使用它要求先添QuartzCore.framework和引进对应的框架<QuartzCore/QuartzCore.h>

  1. 第一得有CALayer
  • 先导化二个CAAnimation对象,并设置某个卡通相关属性
  • 通过调用CALayer的addAnimation:forKey:方法,扩充CAAnimation对象到CALayer中,那样就会初叶实践动画了
  • 通过调用CALayer的removeAnimationForKey:方法能够告一段落CALayer中的动画

定时器CADisplayLink

  • CADisplayLink是一种以显示器刷新频率触发的原子钟机制,每分钟实行大约60次左右。
  • CADisplayLink是一个计时器,能够使绘图代码与视图的基础代谢频率保持同步。而NSTimer不能够保证停车计时器实际被触发的标准时间。
  • 利用格局:
    • 定义CADisplayLink并创造触发调用方法。
    • CADisplayLink累加到主运维循环队列。

本文由胜博发-编程发布,转载请注明来源:核心动画的继承关系图.png,所以在了解Core Anim