iOS动画与绘图需要了解的点

动画

动画分为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常见的子类(CABasicAnimationCAKeyframeAnimation并不是直接继承自CAanimation,而是继承自CAPropertyAnimationCAPropertyAnimation继承自CAanimationCASpringAnimation则继承自CABasicAnimation):

  • CABasicAnimation (基础动画)

  • CAKeyframeAnimation (关键帧动画,可以设置多个路径)
  • CAAnimationGroup (动画组支持多个动画并发执行)
  • CASpringAnimation(弹性动画 iOS 9.0后)

  • 二维动画CGAffineTransform (平移,缩放,旋转和倾斜)

  • 三维动画CATransform3D (实现3D立体效果)

绘图

iOS可以通过Core GraphicUIBezierPath(UIKit类)进行绘图。当我们需要绘图到根层上时(UIView的绘图),需要在drawRect:方法中绘制;如果是自定义的layer(如:CAShapeLayer)可以在其它地方绘图将path赋值给layerpath,具体使用情况可以根据需要灵活使用。

需要注意的是drawRect的方法属于Core Graphic框架,占用CPU消耗内存较大;而自定义的layer属于QuartzCore框架,通过GPU渲染图层,不消耗内存

UIView的属性layer是专门管理图像绘制与动画的图层。其中UIView继承自UIResponder,而UIView的属性layer属于CALayer类,CALayer继承自NSObject,所以UIViewCALayer类本质上的区别是,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的对比