iOS图形处理相关iOScalayer及其子类 与动画相关的

iOS核心动画高级技巧:第一部分-图层

2016-05-06  本文已影响1496人  SvenLearn

本文是要点型笔记,建议先阅读以下参考内容后再阅读,完成知识体系的构建:
 [1] View Programming Guide for iOS
 [2] Core Animation Programming Guide
 [3] ios核心动画高级技巧
 [4] 通过实现一个TableView来理解IOS UI编程
 [5] 详解 CALayer 和 UIView 的区别和联系
 [6] iOS绘图教程
 [7] Quartz 2D编程指南之一~十三 - 南峰子


LayerKit => Core Animation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,可视内容(图片、文本、背景色、…)被分解成独立的图层,存储在一个叫做【图层树】的体系之中。

图层可以通过【寄宿图】来提供可视内容,通过【图层几何学/布局特性】锁定摆放的位置,可以加一些基础【视觉效果】(圆角、边框、阴影、蒙版、拉伸、透明…)或高级视觉效果-【变换】(仿射、3D);除了图片和背景纯色之外,CA还提供了一系列【专有图层】对绘制能力进行了扩展,针对特殊场景进行了封装和性能优化。

注:优先级-displayLayer: > -drawInContext: > -drawLayer:inContext: > -drawRect:

附 UIKit & Quarts 2D:


第一章:图层的树状结构

1. 四个平行的层级关系

视图树 —— UIView,着重于交互-响应事件(触摸/手势…),作为CALayer的管理者
模型树/逻辑树(目标帧) —— CALayer - modelLayer(),不涉及响应链(通过视图层级关系传递触摸事件的机制)
呈现树/动画树(当前帧) —— presentationLayer(), 动画过程中的当前值,详见第七章
渲染树/显示树(下一帧) —— 图层和动画打包提交到渲染服务后反序列化所得树,被用于生成gl三角形s,详见第十二章

2. CALayer和UIView的区别和联系

3. CALayer和UIView的选择

UIView的适用场景

CALayer的适用场景:


第二章:设置寄宿图 - 给图层提供内容


第三章:图层几何学


第四章:视觉效果


第五章:变换


第六章:专用图层 +(Class)layerClass

textLayer.contentsScale = UIScreen.mainScreen().scale
var visibleRect: CGRect { get }
func scrollPoint(_ p: CGPoint)  // 从图层树中查找并找到第一个可用的CAScrollLayer,然后滑动它使得指定点成为可视的
func scrollToRect(_ r: CGRect)  // 类似,不过是使指定矩形可视
-(void)drawLayer:(CATiledLayer *)layer inContext:(CGContextRef)ctx //在此根据需要加载不同的tile
class func fadeDuration() -> CFTimeInterval
tileLayer.contentsScale = [UIScreen mainScreen].scale;

CAEmitterLayer看上去像是许多CAEmitterCell的容器,这些CAEmitierCell定义了一个例子效果。你将会为不同的例子效果定义一个或多个CAEmitterCell作为模版,同时CAEmitterLayer负责基于这些模版实例化一个粒子流。一个CAEmitterCell类似于一个CALayer:它有一个contents属性可以定义为一个CGImage,另外还有一些可设置属性控制着表现和行为。

- 一个高性能的粒子引擎,被用来创建实时粒子动画如:烟雾,火,雨等等这些效果。
- 自身属性
  + emitterCells
  + preservesDepth
  + renderMode
    - kCAEmitterLayerAdditive是叠加效果,其他是覆盖效果
- [CAEmitterCell](https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CAEmitterCell_class/)的属性
 + contents、color 
 + birthRate
 + lifetime 、lifetimeRange - 类似velocity
 + alphaSpeed 
 + velocity、velocityRange - [velocity~(velocity+velocityRange)]定义了速度变化范围
 + emissionLatitude(z轴)、emissionLongitude(xy平面)、emissionRange(环绕发射角度的一个圆锥范围)
class func setCurrentContext(_ context: EAGLContext!) -> Bool
func renderbufferStorage(_ target: Int, fromDrawable drawable: EAGLDrawable!) -> Bool
func presentRenderbuffer(_ target: Int) -> Bool
 + CAEAGLLayer的[drawableProperties属性](https://developer.apple.com/library/ios/documentation/iPhone/Reference/EAGLDrawable_Ref/index.html#//apple_ref/occ/intfp/EAGLDrawable/drawableProperties)(EAGLDrawable协议)
 + [GLKBaseEffect](https://developer.apple.com/library/ios/documentation/GLkit/Reference/GLKBaseEffect_ClassRef/) - 着色逻辑:func prepareToDraw()
 + glXxx系列方法(setupBuffers & drawFrame)
上一篇 下一篇

猜你喜欢

热点阅读