UI进级 15 Core Animation

Core Animation的动画执行过程都是在后台操作的,使用它能做出非常炫丽的动画效果,Core Animation的动画执行过程都是在后台操作的,Core Animation简介,CAAnimation——动画填充模式,核心动画,核心动画继承结构图

金沙澳门官网7817网址 3
  • Core Animation,普通话翻译为着力动画,它是一组特别强劲的卡通片处理API,使用它能做出拾叁分炫彩的动画片效果,何况往往是一矢双穿。
    也正是说,使用一丢丢的代码就足以兑现充足强劲的成效。
  • Core Animation能够用在Mac OS X和iOS平台。
  • Core Animation的动画片施行进度都以在后台操作的,不会卡住主线程。
  • 要静心的是,Core Animation是直接成效在CALayer上的,而不是UIView。

Core Animation简介
Core
Animation,中文翻译为主旨动画,它是一组十分强劲的卡通管理API,使用它能做出丰盛炫丽的动画效果,并且一再是经济。也正是说,使用小量的代码就能够实现充足强劲的职能。
Core Animation能够用在Mac OS X和iOS平台。
Core Animation的动画试行进程都以在后台操作的,不会卡住主线程。
要留神的是,Core Animation是直接效用在CALayer上的,实际不是UIView。

着力动画

金沙澳门官网7817网址 1图形来自500px

掌握
主干动画基本概念
主旨动画
重大帧动画
动画组
转场动画

Core Animation简介

  • Core
    Animation,汉语翻译为宗旨动画,它是一组至极有力的卡通处理API,使用它能做出非常炫目的动画效果,何况反复是占低价。也正是说,使用一丢丢的代码就足以达成充足有力的功能。
  • Core Animation能够用在Mac OS X和iOS平台。
  • Core Animation的动画推行进度都是在后台操作的,不会阻塞主线程。
  • 要注意的是,Core Animation是直接功效在CALayer上的,而不是UIView。
  • 乔大当家在二〇〇五年的WWDC大会上亲自为您演示Core
    Animation的兵不血刃:点击查阅摄像

文 || 張贺

  • 若果不是xcode5之后的本子,使用它要求先加多QuartzCore.framework和引进对应的框架<QuartzCore/QuartzCore.h>
  • 付出步骤:
    • 1.首先得有CALayer
    • 2.初始化贰个CAAnimation对象,并安装有个别动画相关属性
    • 3.透过调用CALayer的addAnimation:forKey:方法,扩大CAAnimation对
      象到CALayer中,那样就会开始实行动画
    • 4.透过调用CALayer的removeAnimationForKey:方法能够告一段落CALayer
      中的动画

主干动画接二连三结构图

金沙澳门官网7817网址 2

骨干动画接二连三结构.jpeg

着力动画连续结构

  • 主导动画中保有类都坚守CAMediaTiming
  • CAAnaimation是个抽象类,不有所动画效果,必得用它的子类才有动画效果
  • 哪多少个子类了,CAAnimationGroup和CATransition才有动画效果,C –
    AAnimationGroup是个卡通组,能够并且进行缩放,旋转。CATransition是转场动画,界面之间跳转都足以用转场动画。
    CAPropertyAnimation也是个抽象类,本人不具备动画效果,独有子类才有
  • 哪五个子类了,CABasicAnimation和CAKeyframeAnimation
  • 金沙澳门官网7817网址,CABasicAnimation基本动画,做一些不难易行意义
  • CAKeyframeAnimation帧动画,做一些连连的流利的动画
  • Core
    Animation,普通话翻译为主旨动画,它是一组非凡强劲的卡通片管理API,使用它能做出丰盛酷炫的动画片效果,并且往往是经济。也便是说,使用小量的代码就能够完成足够强劲的效率。
  • Core Animation能够用在Mac OS X和iOS平台。
  • Core Animation的动画片执行进度都以在后台操作的,不会卡住主线程。
  • 要注意的是,Core Animation是直接功效在CALayer上的,并非UIView。

Core Animation的采纳手续

1.率先得有CALayer
2.开始化贰个CAAnimation对象,并设置有个别卡通相关属性
3.由此调用CALayer的addAnimation:forKey:方法,扩展CAAnimation对象到CALayer中,那样就可以开端实行动画了
4.因此调用CALayer的removeAnimationForKey:方法能够告一段落CALayer中的动画

Core Animation的行使手续

  • 倘诺不是xcode5之后的本子,使用它需求先加多QuartzCore.framework和引进对应的框架<QuartzCore/QuartzCore.h>
  • 支出步骤:
    • 1.第一得有CALayer
    • 2.开始化三个CAAnimation对象,并设置有些卡通相关属性
    • 3.通过调用CALayer的addAnimation:forKey:方法,扩张CAAnimation对象到CALayer中,那样就能够伊始实行动画了
    • 4.经过调用CALayer的removeAnimationForKey:方法能够告一段落CALayer中的动画

金沙澳门官网7817网址 3骨干动画延续结构图

  • 是颇具动画对象的父类,担负调整动画的持续时间和进程,是个抽象类,无法直接行使,应该利用它有血有肉的子类
  • 属性表达:(浅蓝紫表示来自CAMedia提姆ing商业事务的属性)
    • duration :动画持续时间
    • repeatCount:重复次数,Infiniti循环能够设置HUGE_VALF或者MAXFLOAT
    • duration:重复时间
    • removedOnCompletion:暗中同意为YES,代表动画试行完成后就从图层上移除,图形会
      恢复生机到动画实践前的情事。假虚拟让图层保持呈现动画实践后的状态,那就设置
      为NO,但是还要设置fillMode为kCAFillModeForwards
    • fillMode:决定当前指标在非active时间段的表现。举个例子卡通伊始在此以前依然动画片甘休未来
    • beginTime:可以用来设置动画延迟实践时间,若想延期2s,就安装
      为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的此时此刻岁月
    • timingFunction:速度调节函数,控制动画运维的节奏
    • delegate:动画代理

CAAnimation 简介

是具有动画对象的父类,担负调节动画的持续时间和进度,是个抽象类,无法直接采取,应该使用它实际的子类
质量表达:

1. duration:动画的持续时间
2. repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT
3. repeatDuration:重复时间
4. fillMode:决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后
5. beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,
CACurrentMediaTime()为图层的当前时间
(以上来自CAMediaTiming协议的属性)
6. removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。
如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
7. timingFunction:速度控制函数,控制动画运行的节奏
8. delegate:动画代理

CAAnimation——简介

  • 是装有动画对象的父类,负担调整动画的持续时间和速度,是个抽象类,不能够向来运用,应该采用它现实的子类
  • 特性表达:(桔黄代表来自CAMediaTiming琢磨的性质)

duration:动画的持续时间
repeatCount:重复次数,无限循环可以设置HUGE_VALF或者MAXFLOAT
repeatDuration:重复时间
removedOnCompletion:默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillMode为kCAFillModeForwards
fillMode:决定当前对象在非active时间段的行为。比如动画开始之前或者动画结束之后
beginTime:可以用来设置动画延迟执行时间,若想延迟2s,就设置为CACurrentMediaTime()+2,CACurrentMediaTime()为图层的当前时间
timingFunction:速度控制函数,控制动画运行的节奏
delegate:动画代理

图注:

CAAnimation 动画填充方式

fillMode属性值(要想fillMode有效,最棒设置removedOnCompletion = NO)

  1. kCAFillModeRemoved
    这些是暗许值,相当于说当动画肇始前和动画片甘休后,动画对layer都没有影响,动画甘休后,layer会苏醒到事先的情景
  2. kCAFillModeForwards 当动画甘休后,layer会一贯保持着卡通最后的气象
  3. kCAFillModeBackwards
    在动画初始前,只要求将动画出席了四个layer,layer便登时进入动画的起来状态并等候动画开头。
  4. kCAFillModeBoth
    这一个实际便是上面五个的合成.动画插足后初始以前,layer便处于动画最早状态,动画甘休后layer保持动画最终的场馆

CAAnimation——动画填充格局

fillMode属性值(要想fillMode有效,最好设置removedOnCompletion = NO)

kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态
kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。
kCAFillModeBoth 这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态
  • 着力动画中兼有类都遵从CAMediaTiming。
  • CAAnaimation是个抽象类,不持有动画效果,必须用它的子类(CAAnimationGroup和CATransition)才有动画效果。
  • CAAnimationGroup,能够并且开展缩放,旋转。
  • CATransition,分界面之间跳转都足以用转场动画。
  • CAPropertyAnimation也是个抽象类,自身不有所动画效果,唯有子类(CABasicAnimation和CAKeyframeAnimation)才有动画效果。
  • CABasicAnimation,做一些简短意义。
  • CAKeyframeAnimation,做一些总是的流畅的卡通。
  • fillMode属性值(要想fillMode有效,最佳设置removedOnCompletion = NO)
  • kCAFillModeRemoved
    这几个是暗中同意值,也正是说当动画起来前和卡通片截止后,动画对layer都不曾影响,动画结束后,layer会复苏到从前的图景
  • kCAFillModeForwards 当动画甘休后,layer会平素维系着卡通最后的情事
  • kCAFillModeBackwards
    在动画最初前,只须要将动画片参加了一个layer,layer便马上步向动画的初步状态并等候动画开头。
  • kCAFillModeBoth
    这几个实在便是地方五个的合成.动画出席测后果初步以前,layer便处在动
    画起来状态,动画甘休后layer保持动画最终的意况

CAAnimation 速度决定函数

速度调整函数(CAMediaTimingFunction)
kCAMediaTimingFunctionLinear(线性):匀速,给您一个相持静态的感到
kCAMediaTimingFunctionEaseIn(渐进):动画缓慢步入,然后加快离开
kCAMediaTimingFunctionEaseOut(渐出):动画全速步入,然后减速的到达目标地
kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加快,然后减速的达到指标地。这一个是暗中同意的动画片行为。

CAAnimation在分拣中定义了代办方法

@interface NSObject (CAAnimationDelegate)
- (void)animationDidStart:(CAAnimation *)anim;
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;
@end

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;
}

CALayer上动画的重整旗鼓

#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;
}

CAAnimation——速度调控函数

速度控制函数(CAMediaTimingFunction)
kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉
kCAMediaTimingFunctionEaseIn(渐进):动画缓慢进入,然后加速离开
kCAMediaTimingFunctionEaseOut(渐出):动画全速进入,然后减速的到达目的地
kCAMediaTimingFunctionEaseInEaseOut(渐进渐出):动画缓慢的进入,中间加速,然后减速的到达目的地。这个是默认的动画行为。

CAPropertyAnimation

是CAAnimation的子类,也是个抽象类,要想创制动画对象,应该使用它的三个子类:

  1. CABasicAnimation
  2. CAKeyframeAnimation

性情表达:
keyPath:通过点名CALayer的叁性格能名叫key帕特h(NSString类型),而且对CALayer的那么些脾性的值实行修改,达到相应的卡通效果。比方,钦点@“position”为keyPath,就修改CALayer的position属性的值,以到达运动的卡通片效果

CAAnimation——动画代理方法

CAAnimation在分类中定义了代理方法

@interface NSObject (CAAnimationDelegate)

/* Called when the animation begins its active duration. */

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

/* Called when the animation either completes its active duration or
 * is removed from the object it is attached to (i.e. the layer). 'flag'
 * is true if the animation reached the end of its active duration
 * without being removed. */

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

@end
  • 假若不是xcode5之后的本子,使用它须要先增添QuartzCore.framework和引进对应的框架<QuartzCore/QuartzCore.h>
  • 支出步骤:1.率先得有CALayer2.开端化多个CAAnimation对象,并安装某些动画相关属性3.由此调用CALayer的addAnimation:forKey:方法,扩大CAAnimation对象到CALayer中,那样就能够初始实施动画了4.通过调用CALayer的removeAnimation:ForKey:艺术能够告一段落CALayer中的动画
  • 进程序调整制函数(CAMediaTimingFunction)
    • kCAMediaTimingFunctionLinear:匀速,给您一个周旋静态的感到
    • kCAMediaTimingFunctionEaseIn:动画缓慢步入,然后加速距离
    • kCAMediaTimingFunctionEaseOut:动画全速步入,然后减速的达到指标地
    • kCAMediaTimingFunctionEaseInEaseOut:动画缓慢的踏入,中间加快,然后减速的达到目标地。这几个是默许的卡通行为。

一、CABasicAnimation 基本动画

基本动画,是CAPropertyAnimation的子类

质量表达:
fromValue:keyPath相应属性的早先值
toValue:keyPath相应属性的利落值

动画进程表达:
乘机动画的进展,在长短为duration的持续时间内,keyPath相应属性的值从fromValue逐步地改成toValue
keyPath内容是CALayer的可动画Animatable属性
借使fillMode=kCAFillModeForwards同一时候removedOnComletion=NO,那么在动画推行完成后,图层会维持显示动画实施后的事态。但在真相上,图层的属性值依旧动画施行前的伊始值,并不曾真正被转移。

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;
}
CAAnimation – 简介
  • 是兼备动画对象的父类,担任调节动画的持续时间和进程,是个抽象类,无法直接使用,应该使用它现实的子类
  • 性格表明:(粗体代表来自CAMediaTiming钻探的品质)
  • duration:动画的持续时间
  • repeatCount:重复次数,Infiniti循环能够安装HUGE_VALF或者MAXFLOAT
  • repeatDuration:重复时间
  • removedOnCompletion:默感觉YES,代表动画施行实现后就从图层上移除,图形会回涨到动画施行前的处境。假若想让图层保持展现动画实行后的情事,这就设置为NO,可是还要设置fillMode为kCAFillModeForwards
  • fillMode:决定当前目的在非active时间段的一举一动。例如动画片开首以前依然动画片结束之后
  • beginTime:可以用来设置动画延迟实施时间,若想延缓2s,就安装为
    CACurrentMediaTime()+2,CACurrentMediaTime()为图层的此时此刻岁月
  • timingFunction:速度调整函数,调整动画运营的节奏
  • delegate:动画代理