QuartzCore和CoreAnimation

2017-12-08  本文已影响12人  MacPen

我们简单介绍过CAAnimation中的几个动画效果,使用CAAnimation中的动画进行简单的参数设置就可以实现一些简单的动画,通过动画组同时执行多个简单动画可以实现相对复杂一些的动画,但是像下面这种特别复杂的动画的效果怎么做呢

EmitterLayer.gif
那就要用到CoreAnimation了,关于QuartzCoreCoreAnimation的关系,我们先来看一下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创建的CALayerUIView一样是一个矩形,我们可以通过设置view.layer的一些属性来设置UIView图形的圆角,边框,阴影等。对于那些不需要交互的显示内容,我们也可以直接创建和添加CALayer,如果显示的内容特殊或者复杂,那CALayer的子图层们就能派上用场了,也就是CoreAnimation中的专用图层类:

CAShapeLayer: 根据设置的路径,直接绘制出一个自定义的形状
CAReplicatorLayer:用来对一个图层的子图层进行复制,并且可以属性偏移
CAScrollLayer:用来呈现比他本身尺寸大的内容,可以滑动,类似UIScrollView
CATextLayer:可以显示字符串
CATiledLayer:就像拼接板一样,将一张图片切成一格一格地显示
CATransformLayer:用来构建一些3d效果的图层
CAEAGLLayer:通过OpenGL进行界面的绘制
CAEmitterLayer:粒子生成系统,可以创建出上面图例中的粒子动画效果
CAGradientLayer:色彩渐变的图层效果

有些看似很复杂炫酷的效果使用专用图层都能够轻松实现,使用熟练之后可以多个图层配合使用,随心所欲地创造想要的效果,脑洞有多大,舞台就有多大~

上一篇 下一篇

猜你喜欢

热点阅读