iOS 核心动画 Core Animation浅谈

代码地址如下:
http://www.demodashi.com/demo/11603.html

前记

关于实现一个iOS动画,如果简单的,我们可以直接调用UIView的代码块来实现,虽然使用UIView封装的方法很方便,但是这只能用于一些简答的动画,如果是一些复杂的动画呢?这就不得不去研究下核心动画Core Animation(包含在Quartz Core框架中)了。这这之前我们必须了解,CALayer就包含在Quartz Core框架中,这是一个跨平台的框架,既可以用在iOS中又可以用在Mac OS X中。在使用Core Animation开发动画的本质就是将CALayer中的内容转化为位图从而供硬件操作,所以要熟练掌握动画操作必须熟悉CALayer,关于CALayer就不在这里讲了。今天主要是分析核心动画,iOS 中的核心动画又分为下面几种:基础动画、关键帧动画、动画组、转场动画、弹簧动画。下面我们先来了解下各个动画之间的关系

core_animation.jpeg

动画简介
CAAnimation
@interface CAAnimation : NSObject
    <NSCoding, NSCopying, CAMediaTiming, CAAction>
{
@private
  void *_attr;
  uint32_t _flags;
}

这是核心动画的基类,不能直接使用,主要负责动画的时间、速度等,从上面可以看出是准守CAMediaTiming协议的。

CAPropertyAnimation

属性动画的基础类,继承自CAAnimation,不能直接使用。何谓属性动画呢?即通过修改属性值就可以产生动画效果。

CAAnimationGroup

动画组,继承自CAAnimation,顾名思义就是一种组合动画,可以通过动画组来进行所有动画行为的统一控制,组中所有动画效果可以并发执行。

CATransition

转场动画,继承自CAAnimation,主要是通过滤镜来进行动画的效果设置

CABasicAnimation

基础动画,继承自CAPropertyAnimation,通过属性控制动画的参数,只要初始状态和结束状态

CAKeyframeAnimation

关键帧动画,继承自CAPropertyAnimation,也是通过属性控制动画参数,但是与基础动画不同的是有多个控制状态,并且可以通过path来实现动画

CASpringAnimation

弹簧动画,是在iOS 9中引入的,继承自CABasicAnimation,用于制作弹簧动画

动画使用

在使用动画之前,先补充个知识点—UIBezierPath, 这在动画使用的过程中会经常用到

核心动画

要使用核心动画,我们必须先了解下其属性,这里我们先看其遵守的协议<CAMediaTiming>

属性 说明
beginTime 指定动画开始的时间。开始延迟几秒的话,设置为CACurrentMediaTime() + 秒数 的方式即可
duration 动画的时长
speed 动画的速度
timeOffset 详细说明
repeatCount 动画重复的次数,如果要一直持续设置为HUGE_VALF即可
repeatDuration 设置动画的时间。在该时间内动画一直执行,不计次数
autoreverses 动画结束时是否执行逆动画
fillMode 分四种情况,分别为kCAFillModeForwardskCAFillModeBackwardskCAFillModeBothkCAFillModeRemoved,决定当前对象在非active时间段的行为,比如动画开始之前或者动画结束之

CAAnimation属性

属性 说明
timingFunction 速度控制函数,控制动画运行的节奏
removedOnCompletion 默认为YES,代表动画执行完毕后就从图层上移除,图形会恢复到动画执行前的状态。如果想让图层保持显示动画执行后的状态,那就设置为NO,不过还要设置fillModekCAFillModeForwards

关于fillMode的四种情况:

  • kCAFillModeRemoved 默认值,动画结束后,layer会恢复到之前的状态

  • kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态,而removedOnCompletion的默认属性值是 YES,所以为了使动画结束之后layer保持结束状态,应将removedOnCompletion设置为NO

  • kCAFillModeBackwards 在动画开始前,只需要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始。

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

关于速度CAMediaTimingFunction控制的四种情况
- kCAMediaTimingFunctionLinear(线性):匀速,给你一个相对静态的感觉

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

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

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

属性动画

从上图中我们知道,属性动画是继承自核心动画,在其API中我们可以看到有如下函数和属性

+ (instancety
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值