动画
动画分为UIView动画(视图动画),CATransation(隐式动画),CAanimation(显式动画),CGAffineTransform(二维动画),CATransform3D(三维动画)
其中UIView动画属于UIKit
框架的UIView
类,CATransation继承于CAanimation属于QuartzCore
框架;CATransform3D也属于QuartzCore
框架是一个C的结构体;CGAffineTransform属于CoreGraphics
框架是一个C的结构体,CoreGraphics
是一套C语言绘图框架,具有很强的移植性
视图动画
UIView
动画(包含弹性动画 iOS 8.0后)
隐式动画
需要把属性绑定到原子事务CATransation
通过CATransation begin
与CATransation commit
进行开始与提交动画,隐式动画通过CAanimation
实现的,所以所有的隐式动画可以做到的显式动画都可以
显式动画
CAanimation
类管理重复动画,控制时间和步调,能够设定到图层过渡
CAanimation
常见的子类(CABasicAnimation
与CAKeyframeAnimation
并不是直接继承自CAanimation
,而是继承自CAPropertyAnimation
,CAPropertyAnimation
继承自CAanimation
,CASpringAnimation
则继承自CABasicAnimation
):
-
CABasicAnimation (基础动画)
- CAKeyframeAnimation (关键帧动画,可以设置多个路径)
- CAAnimationGroup (动画组支持多个动画并发执行)
-
CASpringAnimation(弹性动画 iOS 9.0后)
-
二维动画:CGAffineTransform (平移,缩放,旋转和倾斜)
- 三维动画:CATransform3D (实现3D立体效果)
绘图
iOS可以通过Core Graphic
与UIBezierPath
(UIKit
类)进行绘图。当我们需要绘图到根层上时(UIView
的绘图),需要在drawRect:
方法中绘制;如果是自定义的layer
(如:CAShapeLayer
)可以在其它地方绘图将path
赋值给layer
的path
,具体使用情况可以根据需要灵活使用。
需要注意的是drawRect
的方法属于Core Graphic
框架,占用CPU消耗内存较大;而自定义的layer
属于QuartzCore
框架,通过GPU渲染图层,不消耗内存
UIView
的属性layer
是专门管理图像绘制与动画的图层。其中UIView
继承自UIResponder
,而UIView
的属性layer
属于CALayer
类,CALayer
继承自NSObject
,所以UIView
与CALayer
类本质上的区别是,CALayer
类无法响应事件。需要注意的UIView
属于UIKit
框架而CALayer
属于QuartzCore
框架。
CALayer拥有以下几个常见的子类:
-
CAEmitterLayer (发射器层,用来控制粒子效果)
- CAGradientLayer (梯度层,颜色渐变)
- CAEAGLayer (用
OpenGL ES
绘制的层) - CAReplicationLayer (用来自动复制
sublayer
) - CAScrollLayer (用来管理可滑动的区域)
- CAShapeLayer (绘制立体的贝塞尔曲线)
- CATextLayer (可以绘制
AttributeString
) - CATiledLayer (用来管理一副可以被分割的大图)
- CATransformLayer (用来渲染3D layer的层次结构)
Core Graphic
图形上下文CGContextRef
绘图包括获取上下文,添加点绘图,设置上下文,渲染上下文,关闭路径
参考链接:
http://blog.csdn.net/ssirreplaceable/article/details/52974023 核心绘图——Core Graphics http://www.cocoachina.com/ios/20150616/12171.html 弹性动画 https://www.cnblogs.com/chrisbin/p/6391933.html?utm_source=itdadao&utm_medium=referral DrawRect与CAShapeLayer的对比