一. 概论 --- 四类主要等class
l layer layer是模型,不是视图,他提供一个content
l Animation/Timing
l 布局管理类
l 转换管理类
二. 关于层 --- 参考CALayer
Core Animation 渲染体系
Layer Tree: 图层的模型数值
presentation tree: 显示动画时的呈现树(当设置一个属性例如backgroud,在layer tree中会立刻更新,在这里会采用插值计算)
render-tree: 采用呈现树的数据,显示layer tree中的数据
在动画处理中,可以查询到呈现图层的属性.
几何特性和变化: 锚点.矩阵
layer tree 体系: 与view类似
三. (为context或view) 提供图层内容
l 设置content属性,CGImageRefa
setNeedsDisplay / setNeedsDisplayInRect:/needsDisplayOnBoundsChange = YES.会通知图层重绘:
l 通过委托实现 --- 通常是与一个context关联或者修改自己的content属性
l 子类化 --- 将context作为参数传入或者直接修改自己的属性
setNeedsDisplay -> [delegate drawLayer:(CALayer*)theLayer
inContext:(CGContextRef)theContext] -> 绘图
或者: 执行子类自己覆盖的相同方法
注意: context 由系统生成! CALayer只是一个数据模型!
四. 动画
l 隐式动画:
l 显式动画: CAAnimation
五. 图层Action
当图层移出插入或者替换现有图层时会触发layer action//以及可动画属性发生改变时
已定义的搜索模式: (默认在actionForKey: 中的实现)
1. 如果它的委托实现了actionForLayer:forKey: 应该如下响应
1. 返回一个响应标识的action对象
2. 如果无法相应,返回nil
3. 如果没有处理这个标识,并且需要停止搜索,返回NSNull
2. layer的actions字典被搜索. 为了响应该标识
3. 图层的 style 属性被搜索以便找到一个包含行为标识符的 actions 字典
4. layer将会收到defaultActionForKey:消息.该消息返回一个对应表示的action对象,或者nil;
覆盖隐式动画:
通过委托actionForLayer:forKey:或者子类化覆盖,并且覆盖defaultActionForKey:
六. Transactions(大概是过度的意思)
隐式Transactions
显式Transactions
CATransactions 的操作类似于UIView的动画.具体参考其类
l 临时的禁止动画
l 覆盖隐式动画的持续时间
l 嵌套动画
七. 动画图层的布局
约束管理步骤
1. 创建CAConstraintLayoutManager实例并交给layer的layoutManager属性
2. 子图层中添加CAConstraint并且设置属性.
3. 将子图层添加到父图层
八. 图层样式属性
AnimationTypes和Timing
动画类概述
大合集,N合一
Timing, Timespaces, and CAAnimation
l CAAnimation 所有动画类的基类,遵守CAMediaTiming与CAAction协议.
CAMediaTiming: 提供模型花时间系统
CAAction: 由Layer的变化触发
基于属性的动画: CAPropertyAnimation
l CABasicAnimation : 对Layer的属性(animationWithKeyPath:)进行修改
l Keyframe Animations: 属性修改的聚合,指定path或者一堆的点
转化动画: 不同于属性动画操作layer的属性,它操作的是整个图层,
l CATransition
Core Image
Core Image概念
可以通过滤镜执行的操作
l Crop images --- 修剪图像
l 校正颜色
l 接受颜色效果,例如棕色色调
l 模糊/锐化图像
l 组合图像
l 扭曲/转化图像几何形状
l 生成色彩,棋盘模式,高斯渐变和其他样式图像
l 为图像或视频添加变化效果
l 为视频提供实时颜色调整
Core Graphics 和Core Image (首先选择GPU)是平行关系,都基于OpenGL
关于滤镜
系统内建100多个滤镜,并且可以支持第三方图像单元(image unit)
滤镜的分类:( filter category) 滤镜根据作用和意图做了一个分类(可以批量加载)
显示名: (display name) 显示再用户界面
滤镜名: (filter name) 访问滤镜
输入参数:( input parameters) 是控制如何处理. 每个参数包含一个属性类(attribute class) --- 指定他的数据类型.
如下为典型的数据类型:
l NSString
l NSNumber
l CIVector
l CIColor
l CIImage
l NSAffineTransform
惰性求值(lazy evaluation) outputImage会将计算整合在CIImage,直到真正绘图的时候才会采取计算
kernel --- 滤镜的核心计算,有点类似于GLSL
关于Core Image:
l 处理流程:反向加载
l 坐标空间: CoreImage的坐标是无无限的,并且目标图和源图的坐标不一样
l 有效区域:(regionof interest ROI) 如上图,需要采样的区域
l 可/不可执行滤镜 可执行指二进制文件.需要在MAC的CPU上生成相应代码
l 颜色组件和Alpha通道
使用Core Image滤镜
获取一堆的滤镜和属性:…
使用Core Image滤镜处理图像都步骤//滤镜只是一个访问者
1. 创建CIContext对象
2. 回去处理都图片
3. 创建接受CIImage的CIFilter
4. 设置filter的默认值
5. 设置filter参数
6. 接受一个或多个filter //就是再搞一个滤镜再操作一次
7. 绘制处理过的图像
使用过度效果
1. 创建CIImage
2. 设置并且编制一个Timer
3. 创建CIContext对象
4. 创建CIFilter对象
5. 设置filter对象的默认值
6. 设置filter参数
7. 设置源/目标图象
8. 计算时间
9. 接受filter
10. 绘制结果
11. 重复8-10,直到结束
绘图动态系统 --- CIImageAccumulator IOS暂时不支持