这是我参与「第四届青训营 」笔记创作活动的第8天
相册权限控制
typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
// 暂未获取权限
PHAuthorizationStatusNotDetermined = 0
// 受限状态, 没有授权访问相册, 用户也无法修改状态
PHAuthorizationStatusRestricted,
// 拒绝授权相册
PHAuthorizationStatusDenied,
// 同意授权
PHAuthorizationStatusAuthorized,
// 受限相册访问, 部分访问
PHAuthorizationStatusLimited,
-
系统相册选择器
- PHPickerViewController iOS14.0+
- UIImagePickerController iOS2.0+
- ALAssetsLibrary 废弃
-
系统选择器是独立进程,独立权限,不需要单独申请
-
自定义选择器需要单独申请,影响范围仅在App内
OpenGL状态机
状态机可以理解为一台保存状态,并根据当前状态进行相应输出的机器 当进入特殊状态时,不再接受输入,停止工作
- 渲染管线 Render Pipeline
- 顶点着色器
- 顶点元素,通过CPU传给GPU
- 顶点坐标通过顶点着色器的处理得到最终的顶点
- 图元装配
- 将顶点着色器输出的所有顶点作为输入,并所有的点装配成指定图元的形状
- 栅格化
- 把顶点数据转换为片元的过程。具有将图转化为一个个栅格组成的图像的作用,特点是每个元素对应帧缓冲区中的一像素
- 片元着色器
- 计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色),这些数据可以被用来计算最终的颜色
- 测试与混合
- Alpha测试和Blending阶段。这个阶段检测片段的对应的深度和模版值,用它们来判断这个像素是其他物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值并对颜色进行混合
- 顶点着色器
滤镜
灵魂出窍的方法
- 首先将图片减去一定值让图片放到中间
- 截取中间一部分
- 恢复到原来位置
- 将截取的部分随时间放大
- 再配合透明度的变化