Core Animation动画概述

原创 2016年06月02日 11:06:01

Core Animation动画概述

1、概述

在iOS中,图形可分为以下几个层次:

越上层,封装程度越高,动画实现越简洁越简单,但是自由度越低。本文着重介绍Core Animation层的动画实现方案。


2、动画概念类

在iOS中,展示动画可以类比于显示生活中的“拍电影”。拍电影有三大要素:演员+剧本+开拍,概念类比如下:

演员--->CALayer,规定电影的主角是谁

剧本--->CAAnimation,规定电影该怎么演,怎么走,怎么变换

开拍--->AddAnimation,开始执行


1)、CAAnimation是什么呢?

CAAnimation是抽象类,定义了动画中“事务”遵循的规则。CAAnimation遵循CAMediaTiming协议和CAAction协议,CAMediaTiming协议用于调整时间,包括持续时间,速度,重复次数等;CAAction协议通过响应动作的方式来显示动画。


2)、CAAnimation子类可分为四种:

(1)、CABasicAnimation

通过设定起始点,终点,时间,动画会沿着你这设定点进行移动。可以看做特殊的CAKeyFrameAnimation。对单一属性提供动画支持

(2)、CAKeyframeAnimation

关键桢动画,可以定义行动路线,你可以通过设定CALayer的始点、中间关键点、终点的frame,时间,动画会沿你设定的轨迹进行移动。

(3)、CAAnimationGroup

Group也就是组合的意思,就是把对这个Layer的所有动画都组合起来。PS:一个layer设定了很多动画,他们都会同时执行,如何按顺序执行我到时候再讲。

(4)、CATransition

提供渐变效果,用在“显式动画”中时可以实现“过渡动画”!

(5)、CATransaction 

事务类,可以对多个layer的属性同时进行修改。

(6)、CAConstraint 

约束类,在布局管理器类中用它来设置属性。

(7)、CAConstraintLayoutManager 

约束布局管理器,是用来将多个CALayer进行布局。各个CALayer是通过名称来区分,而布局属性是通过CAConstraint来设置的。


3)、CAAnimation类常用属性和函数说明:

(1)、@property(retain) id delegate//CAAnimation实例不能设置delegate为self,会引起循环引用。

(2)、@property(getter=isRemovedOnCompletion) BOOL removedOnCompletion//设置是否动画完成后,动画效果从设置的layer上移除,默认为YES。

(3)、@property(retain) CAMediaTimingFunction *timingFunction//设置动画的“时机”效果,就是动画自身的“节奏”:比如:开始快,结束时变慢;开始慢,结束时变快;匀速;等。

(4)、speed:执行速度,如果速度为2,则一个10秒的duration,则只需要5秒完成。

(5)、repeatCount|repeatDuration:重复的次数和重复的间隔 ,如果repeatCount设置成 1e100f则无限重复

(6)、fillMode:决定动画结束时候的状态。要和removeOnCompletion参数一起设置才有效。动画结束后的状态并没有影响layer的位置,其实layer还在原来的地方没变。

此外还有duration,beginTime,timeOffset

(7)、autoreverses:当动画执行到toValue指定的状态时是否从toValue的状态逆回去

(8)、+ (id)animation//创建并返回一个CAAnimation实例。

(9)、+ (id)defaultValueForKey:(NSString *)key//根据属性key,返回相应的属性值。

(10)、- (BOOL)shouldArchiveValueForKey:(NSString *)key//返回指定的属性值是否可以归档。key:指定的属性。YES:指明该属性可以被归档;NO:不能被归档。


CAAnimation协议方法

(11)、- (void)animationDidStart:(CAAnimation *)theAnimation//动画开始时,执行的方法。theAnimation:正在执行动画的CAAnimation实例。

(12)、- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag//动画执行完成或者动画为执行被删除时,执行该方法。theAnimation:完成或者被删除的动画实例;flag:标志该动画是执行完成或者被删除,YES:执行完成;NO:被删除。



CABasicAnimation想要实现不同的效果,最关键的地方在于CABasicAnimation对象的初始化方式中keyPath的设定。在iOS中有以下几种不同的keyPath,代表着不同的效果:

二、显式动画举例

实践出真知,看个例子就知道:比如我们想实现一个类似心跳的缩放动画可以这么做,分为演员初始化、设定剧本、电影开拍三个步骤:

- (void)initScaleLayer

{

    //演员初始化

    CALayer *scaleLayer = [[CALayer alloc] init];

    scaleLayer.backgroundColor = [UIColor blueColor].CGColor;

    scaleLayer.frame = CGRectMake(60, 20 + kYOffset, 50, 50);

    scaleLayer.cornerRadius = 10;

    [self.view.layer addSublayer:scaleLayer];

    [scaleLayer release];

     

    //设定剧本

    CABasicAnimation *scaleAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

    scaleAnimation.fromValue = [NSNumber numberWithFloat:1.0];

    scaleAnimation.toValue = [NSNumber numberWithFloat:1.5];

    scaleAnimation.autoreverses = YES;

    scaleAnimation.fillMode = kCAFillModeForwards;

    scaleAnimation.repeatCount = MAXFLOAT;

    scaleAnimation.duration = 0.8;

     

    //开演

    [scaleLayer addAnimation:scaleAnimation forKey:@"scaleAnimation"];

}


代码中有如下几个参数需要解释一下:

KeyPath:决定基础动画的类型,该值不能随便设置,一旦设置错误就达不到想要的效果。要改变位置就设置position相关,要改变透明度就设置opacity相关,,要等比缩放就设置transform.scale

fromValue:动画的起始状态,虽然iOS文档给出的是id,不过这里应该传NSValue对象,比如NSNumber

autoreverses:当动画执行到toValue指定的状态时是否从toValue的状态逆回去

fileMode:参考网址http://www.jianshu.com/p/cd1bc0e82f4d


对于CAKeyframeAnimation来说,一般用于移动复杂的位置,即KeyPath:@"position”如果valuesCGImagekey-path"contents"的话,则是图像切换;如果valuesCATransform3D,key-path“transform”,则是变换坐标。不要针对framesize等参数设置keyframe动画,似乎没有效果。position是可以的。

核心动画Core Animation系列之概述和CABasicAnimation

概述1.了解layer Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果 Layer与view: view:在iOS中,你能看得见...

Core Animation动画例子

  • 2013年08月27日 23:22
  • 27KB
  • 下载

Core Animation(二)动画基础部分

  • 2015年02月09日 18:16
  • 1.22MB
  • 下载

Core Animation 多个动画顺序播放

同时播放多个动画效果很容易,多次调用addAnimation或者CAAnimationGroup就可以。那么如何序列化播放多个动画呢? 搜索了一下,也不知道是我没搜到,还是苹果就没有提供相应的封装,...
  • zj510
  • zj510
  • 2015年02月05日 16:18
  • 4323

iOS-Core Animation 核心动画高级编程/3-图层几何学

图层几何学 不熟悉几何学的人就不要来这里了 --柏拉图学院入口的签名 在第二章里面,我们介绍了图层背后的图片,和一些控制图层坐标和旋转的属性。在这一章中,我们将要看一看图层内部是如...
  • wxs0124
  • wxs0124
  • 2016年07月20日 14:37
  • 531

Core Animation - 事务之隐式动画

看了隐式动画才知道原来我们经常写的直接展示的或者跳变的东西其实都是有动画的,之所以我们没有看到是因为未指定动画类型,Core Animation提供了方法去做动画,并支持显示动画。通过Core Ani...

iOS-Core Animation 核心动画高级编程/5-变换

变换 很不幸,没人能告诉你母体是什么,你只能自己体会 -- 骇客帝国 在第四章“可视效果”中,我们研究了一些增强图层和它的内容显示效果的一些技术,在这一章中,我们将要研究可以用来对图层旋转,摆...
  • wxs0124
  • wxs0124
  • 2016年07月20日 14:40
  • 438

iOS开发基础知识:Core Animation(核心动画)

Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍。也就是说,使用少量的代码就可以实现非常强大的功能。 Core ...

Core Animation基础介绍、简单使用CALayer以及多种动画效果

Core Animation iOS 转自荣芳志的博客: Core Animation之基础介绍  Core Animation可以翻译为核心动画,它为图形渲...

Core Animation之多种动画效果

这里列出几个动画效果,参考下能加深对Core Animation的认识和理解. 1、把图片移到右下角变小透明 使用CAAnimationGroup叠加动画效果,就是下面按钮《把图片移到右下角变小透...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Core Animation动画概述
举报原因:
原因补充:

(最多只允许输入30个字)