QuartzCore和CoreAnimation
我们简单介绍过CAAnimation
中的几个动画效果,使用CAAnimation
中的动画进行简单的参数设置就可以实现一些简单的动画,通过动画组同时执行多个简单动画可以实现相对复杂一些的动画,但是像下面这种特别复杂的动画的效果怎么做呢
那就要用到
CoreAnimation
了,关于QuartzCore
和CoreAnimation
的关系,我们先来看一下QuartzCore
的头文件
#ifndef QUARTZCORE_H
#define QUARTZCORE_H
#include <QuartzCore/CoreAnimation.h>
#endif / QUARTZCORE_H /
QuartzCore
就是引用了CoreAnimation
的头文件,所以QuartzCore
实际上就是核心动画CoreAnimation
的一个框架,能实现的内容就是一样的。再看一下CoreAnimation
的头文件
#ifndef COREANIMATION_H
#define COREANIMATION_H
#include <QuartzCore/CABase.h>
#include <QuartzCore/CATransform3D.h>
#ifdef OBJC
#import <Foundation/Foundation.h>
#import <QuartzCore/CAAnimation.h>
#import <QuartzCore/CADisplayLink.h>
#import <QuartzCore/CAEAGLLayer.h>
#import <QuartzCore/CAEmitterBehavior.h>
#import <QuartzCore/CAEmitterCell.h>
#import <QuartzCore/CAEmitterLayer.h>
#import <QuartzCore/CAGradientLayer.h>
#import <QuartzCore/CALayer.h>
#import <QuartzCore/CAMediaTiming.h>
#import <QuartzCore/CAMediaTimingFunction.h>
#import <QuartzCore/CAReplicatorLayer.h>
#import <QuartzCore/CAScrollLayer.h>
#import <QuartzCore/CAShapeLayer.h>
#import <QuartzCore/CATextLayer.h>
#import <QuartzCore/CATiledLayer.h>
#import <QuartzCore/CATransaction.h>
#import <QuartzCore/CATransform3D.h>
#import <QuartzCore/CATransformLayer.h>
#import <QuartzCore/CAValueFunction.h>
#endif
#endif / COREANIMATION_H /
可以看到,我们上一篇中用到的CAAnimation
也只是CoreAnimation
中的一部分,CoreAnimation
的功能要强大得多,CoreAnimation
里边的类都是CA开头的,CALayer
也是CoreAnimation
中的一个类。我们创建UIView的时候会随着创建出一个CALayer
,他们的父类继承关系是这样的
UIView —> UIResponder —> NSObject
CALayer —> NSObject
UIView
本身不具备显示的功能,他的显示要靠CALayer
来完成,但是CALayer
不能响应交互,UIView
就是在CALayer
显示内容的基础上添加了响应交互的功能。
随着UIView
创建的CALayer
和UIView
一样是一个矩形,我们可以通过设置view.layer
的一些属性来设置UIView
图形的圆角,边框,阴影等。对于那些不需要交互的显示内容,我们也可以直接创建和添加CALayer
,如果显示的内容特殊或者复杂,那CALayer
的子图层们就能派上用场了,也就是CoreAnimation
中的专用图层类:
CAShapeLayer
: 根据设置的路径,直接绘制出一个自定义的形状
CAReplicatorLayer
:用来对一个图层的子图层进行复制,并且可以属性偏移
CAScrollLayer
:用来呈现比他本身尺寸大的内容,可以滑动,类似UIScrollView
CATextLayer
:可以显示字符串
CATiledLayer
:就像拼接板一样,将一张图片切成一格一格地显示
CATransformLayer
:用来构建一些3d效果的图层
CAEAGLLayer
:通过OpenGL进行界面的绘制
CAEmitterLayer
:粒子生成系统,可以创建出上面图例中的粒子动画效果
CAGradientLayer
:色彩渐变的图层效果
有些看似很复杂炫酷的效果使用专用图层都能够轻松实现,使用熟练之后可以多个图层配合使用,随心所欲地创造想要的效果,脑洞有多大,舞台就有多大~