图层几何学

备注:

frame代表了图层的外部坐标(也就是父图层上占据的空间[指一个和屏幕平行的矩形能完全覆盖图层,比如说图层旋转了,那么他的frame就变大了]),bounds是内部坐标。

图层旋转按照锚点anchorPoint来旋转。

一般我们都知道子图层相对于父图层的位置坐标,但是有时候我们需要知道该子图层相对于其它图层的坐标,CALayer提供了convertPoint系列转换计算position方法。

zPosition最实用的功能就是改变图层的显示顺序。

CALayer不关心任何响应链事件,所以不能直接处理触摸事件或者手势。但是他有一系列的方法帮你处理事件:-containsPoint:和-hitTest:

-containsPoint:的用法,先获取相对于self.view的point,然后利用convertPoint系列方法将点转换为相对于目标layer的坐标,然后用目标layer调用containsPoint方法,看目标layer是否包含了point。包含了就返回YES。

-hitTest:的用法,该方法返回一个layer。返回最外层检测到点击点的layer,不需要利用convertPoint方法进行转换。注意:zPosition可以改变图层的显示顺序,但是不改变事件的传递顺序。

该文涉及了CALayer的集合结构,包括它的frame、position和bounds,介绍了三维空间内图层的概念,以及如何在独立的图层内响应事件,最后简单说明了在iOS平台,Core Animation对自动调整和自动布局支持的缺乏。

视觉效果

备注:

当你需要给一个view添加shadow的时候,如果对应的layer的masksToBounds设置为了YES,就会将边框外的全部裁剪掉,也就是会把shadow裁剪掉。这时候你就需要用一个透明的蒙板罩在view上面,设置蒙板的shadow就好了。

设置shadow,主要设置shadowOpacity不透明度。其次设置shadowColor、shadowOffset和shadowRadius。

图层的shadow并不总是方的,而是从图层的形状继承而来。但是实时计算shadow是非常消耗资源的,尤其是在图层有多个子图层,每个图层还有一个透明效果的寄宿图的时候。如果你知道阴影的形状,那么就可以设置shadowPath这个属性来进行处理了。如果是一个简单的矩形或者是圆啥的,用CGPath很好的到这些path,如果是比较复杂的,那就用UIBezierPath来获取path。

图层蒙板:图层有一个mask属性(CALayer类型),相当于在父图层上将这个layer盖上去,盖到的地方就是你获取到的显示图层。

minificationFilter和magnificationFilter属性可以用来设置图层上图片的清晰度。

该文介绍了一些可以通过代码应用到图层上的视觉效果,如圆角,阴影和蒙板。我们也了解了拉伸过滤器和组透明。

变幻

备注:

UIView的transform属性对应着CALayer 的affineTransform属性,都是仿射变换,所谓仿射变换就是保证变换后对应该平行的都是平行的。我们一般用的就是仿射变换。而CALayer也有一个transform属性(CATransform3D类型)。

混合变换就是利用比如CGAffineTransformScale();之类的方法来进行变换,第一个参数t会影响下次变换的值。eg:

第一个是缩小到0.5倍,第二个是旋转30度,第三个是平移200,但是你会发现最后一个并不是水平移动200,而是朝着30度方向平移了100.这就是前面的缩放影响了距离,旋转影响了角度。

CGAffineTransform transform = CGAffineTransformIdentity; //scale by 50%transform = CGAffineTransformScale(transform, 0.5, 0.5); //rotate by 30 degreestransform = CGAffineTransformRotate(transform, M_PI / 180.0 * 30.0); //translate by 200 pointstransform = CGAffineTransformTranslate(transform, 200, 0);//apply transform to layerself.layerView.layer.affineTransform = transform;
}

除了平时经常用的平移、旋转、缩放还有一种不常用的叫剪切变换也就是倾斜。这个要自己实现。 里面有例子。

灭点:Core Animation定义了这个点位于变换图层的anchorPoint。意思就是当图层发生变换的时候,这个点永远位于图层变换之前的anchorPoint的位置。当改变一个图层的position的时候,同时也改变了它的灭点,做3D变换的时候要记住这一点,当你试图通过调整面m34来让它更具有3D效果时,应该首先把它放置在屏幕中央,然后通过平移来把它移动到指定的位置。但是何必这么麻烦,设置容器layer的sublayerTransform的m34为-1/500就好了。其它的子layer该怎么就怎么。

CALayeryou一个属性doubleSides来控制图层的背面是否需要绘制。有些没必要绘制的地方一定要设置它为NO,这样会减少资源浪费。

专用图层

备注:

CAShapeLayer是用来在CALayer上画图的工具类。画完之后,将CAShapeLayer对象添加到CALayer对象上去。

该文在圆角部分告诉了我们怎么给一个矩形自定义的添加圆角,而不是调用cornerRadius来将所有的直角变成圆角。

CATextLayer类比于UILabel。性能比UILable好。








CoreAnimation余下的链接相关推荐

  1. 矩阵/向量/标量间相互求导

    矩阵.向量都可以表示成张量的形式,向量是矩阵的特殊形式,按实际应用可分为标量对向量求导,标量对矩阵求导.向量对向量求导.矩阵对标量求导.矩阵对向量求导.矩阵对矩阵求导等,在深度学习的反向传播(BP)中 ...

  2. LSTM-长短时记忆网络

    上篇介绍了RNN循环神经网络,上篇在最后说明了RNN有梯度爆炸和梯度消失的问题,也就是说RNN无法处理长时间依赖性问题,本篇介绍的LSTM(长短时记忆网络)是应用最多的循环神经网络,当提到循环神经网络 ...

  3. Zend Framework 入门教程(简体中文版)

    Zend Framework 入门教程(简体中文版) Getting Started With the Zend Framework Author:Rob Allen, www.akrabat.com ...

  4. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...

  5. 拼图游戏 复制粘贴一个叫lemene的人的,这个人是c++博客的用户,我不是,怕以后找不到这篇文章,所以复制粘贴了。文中最后给出了原文链接连接...

    本文讨论如何判断拼图游戏中图形是否可以还原. 例1:下图是一个3X3的数字拼图. 1 3 2 6 5 4 7 8 图1 它要还原成图2 1 2 3 4 5 6 7 8 图2 将问题一般化,在M*N的方 ...

  6. Spring IOC 容器源码分析 - 余下的初始化工作

    1. 简介 本篇文章是"Spring IOC 容器源码分析"系列文章的最后一篇文章,本篇文章所分析的对象是 initializeBean 方法,该方法用于对已完成属性填充的 bea ...

  7. U-boot链接地址的详解

    1.运行地址<--->链接地址:他们两个是等价的,只是两种不同的说法. 2.加载地址<--->存储地址:他们两个是等价的,也是两种不同的说法. 运行地址:程序在SRAM.SDR ...

  8. 嵌入式Linux系统中的.lds链接脚本基础

    from:http://www.embeddedlinux.org.cn/html/xinshourumen/201203/04-1989.html 连接脚本的格式 ================= ...

  9. iOS开发CoreAnimation解读之三——几种常用Layer的使用解析

    iOS开发CoreAnimation解读之三--几种常用Layer的使用解析 一.CAEmitterLayer CAEmitterLayer是CoreAnimation框架中的粒子发射层,在以前的一片 ...

最新文章

  1. 腾讯云详解宕机故障:光纤挖断后的150秒
  2. 这些技术人棒棒哒!BingoDay2017获奖名单新鲜出炉~~~
  3. ping ip 端口_学生会私房菜【20200305期】——Ping命令及其常用参数详解
  4. Monkey基本使用(转载)
  5. Struts(十六):通过CURD来学习Struts流程及ModelDriven的用法
  6. Hibernate开发中常见错误总结
  7. java主键后四位顺序号_JAVA中取顺序号 (转)
  8. 手机python3_python3 简单手机验证码的实现
  9. hust 1605 bfs
  10. HTML5新增的一些特性
  11. java 杀掉 linux下进程和进程的子孙进程
  12. android任务 进程 线程详解,Android任务、进程、线程详解
  13. linux mint 18.3浏览器,在Linux Mint 19/Ubuntu 18.04中安装Tor Browser浏览器的方法
  14. matlab实现一/多元线性回归
  15. 芒果文件服务器,芒果服务器
  16. 怎么修改网页游戏服务器内容,云服务器怎么设置挂网页游戏
  17. vue音乐添加,控制开关
  18. GYY的词典 char
  19. 实时数据库,内存数据库,关系型数据库比较
  20. 2015物联网白皮书:全球物联网正在进入发展新阶段

热门文章

  1. Unity3D3个录屏插件PC,Android,IOS都有
  2. 数据库开发技术 课堂笔记2
  3. 智能车|直流电机、编码器与驱动器---直流电机
  4. catia+caa+rade+visual studio安装配置(V5R19和V5R23)
  5. 产品经理聊当当,电商产品这样设计更好
  6. maya 2017 linux,Ubuntu20.04 安装Maya2017
  7. python聊天室详细教程_python简单实现聊天室功能(代码教程)
  8. csharp进阶练习题:复杂的数字序列试验【难度:2级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
  9. Ralink RT5350 GPIO配置(坑了个大爹的)
  10. 在打开虚拟机时报错,显示VMware Player与Device/Credential Guard不兼容