CATransform3D数据结构定义了一个同质的三维变换(一个4x4的CGFloat矩阵),它被用来对图层进行旋转,缩放,位移,倾斜以及应用透视变换(3D)。

层有两个属性用于指定变换矩阵:transform和sublayerTransform。transform属性指定的矩阵是相对于层的anchorPoint并应用到层和其子层上的。sublayerTransform指定的矩阵应用到层的子层上,而不应用于层自身。所有動作皆會參考到anchorPoint

可以用以下几种方式创建和修改CATransform3D数据结构:
1.使用CATransform3D函数
2.直接编辑数据结构成员
3.使用键值编码(Key-Value Coding)和键路径

CATransform3DIdentity常量是单位矩阵,即没有应用缩放,旋转,倾斜或透视的矩阵。对层应用单位矩阵导致它显式默认的几何特性。

CATransform3D结构成员的意义。

?
structCATransform3D{m11(x缩放), m12(y切变), m13(旋转), m14();m21(x切变), m22(y缩放), m23(), m24();m31(旋转), m32(), m33(), m34()m41(x平移), m42(y平移), m43(z平移), m44();};
PS1: m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义); 代表透视点离当前平面的距离,取值由-1~1各个,其中:
-1 表示透视点在负无穷,1 表示透视点在正无穷,0 表示透视点在当前平面。
PS2:每一個變數都是CGFloat
PS3:整体比例变换时,也就是m11==m22时,若m33>1,图形整体缩小,若0<m33<1,图形整体放大,若s<0,发生关于原点的对称等比变换。

官方資料的翻譯

表1 CATransform3D变换函数,用于移动,旋转和缩放

函数及用途

CATransform3DMakeTranslation
返回移动'(tx, ty, tx)'的变换。 t' = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1].

CATransform3DTranslate
将't' 平移 '(tx, ty, tz)' 并返回结果: * t' = translate(tx, ty, tz) * t.

CATransform3DMakeScale
返回缩放'(sx, sy, sx)'的变换。: * t' = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1].

CATransform3DScale
将 't' 缩放 '(sx, sy, sz)' 并返回结果: * t' = scale(sx, sy, sz) * t.

CATransform3DMakeRotation
返回以向量'(x,y,z)'弧度的'角'旋转的变换。如果向量长度为0返回单位矩阵。

CATransform3DRotate
将't' 以向量'(x,y,z)'弧度的'角'旋转并返回结果. t' = rotation(angle, x, y, z) * t.

旋转的角度以弧度而不是角度为单位。下面的函数允许你在弧度和角度之间转换。

CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};

CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180 / M_PI;};
core animation提供了一个反转矩阵的变换函数,CATransform3DInvert。反转一般用于对被变换对象中的点提供反向变换。反转用于需要从已经进行矩阵变换后恢复一个值:反转这个矩阵,乘上这个反转矩阵的值,结果得到了原来的值。

也有些函数用来将CATransfrom矩阵转换为CGAffineTransfrom矩阵,如果CATransfrom矩阵可以那样表示的话。

表2 CATransfrom变换函数,用于CGAffineTransfrom转换

函数及用途

CATransform3DMakeAffineTransform
返回一个同传入的仿射矩阵效果相同的CATransfrom3D

CATransform3DIsAffine
如果CATransfrom3D可以确切的代表一个仿射矩阵的话,返回YES.

CATransform3DGetAffineTransform
返回传入的CATransform3D代表的仿射矩阵。

还有些函数提供比较变换矩阵是否和单位矩阵或另一个矩阵相同的功能。

表3 CATransform3D变换函数,用于检测相等性

函数及用途

CATransform3DIsIdentity
如果变换是单位变换,返回YES。

CATransform3DEqualToTransform
如果两个变换完全相等,返回YES。

编辑变换的数据结构(Modifying the Transform Data Structure)

你可以编辑CATransform3D数据结构的任何成员的值,列表1包含了CATransform3D结构的定义,结构成员位于相应的矩阵位置上。

未完待续。。。。。。

CoreAnimation-CATransform3D-1相关推荐

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

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

  2. iOS CoreAnimation

    为什么80%的码农都做不了架构师?>>>    前言:这篇文章太全了,忍不住就转了,原地址 CoreAnimation,另外前面写过一篇简单的动画IOS简单动画 核心动画,开发人员可 ...

  3. iOS CoreAnimation专题——实战篇(四)基于拖动手势的视图3D旋转效果

    二维图像的显示 矩阵变换 基向量 线性变换 线性变换的复合 平移变换 齐次坐标 齐次坐标下的点和向量的区别 齐次坐标下的平移变换 齐次坐标下的平行线相交问题 CATransform3D 基于CATra ...

  4. iOS动效-利用CATransform3D实现翻页动画效果

    从事iOS开发已经有一段时间了,之前一直忙于工作,几乎很少有时间写一些东西来对自己掌握的技术进行一下总结,现在想想,有些后悔,因为之前在遇见问题的时候或者学习新技术的时候都是在翻看他人的博客或者查看苹 ...

  5. iOS在图层上使用CATransform3D制做三维动画

    iOS在图层上使用CATransform3D制做三维动画 http://mp.weixin.qq.com/s?__biz=MzIwOTQ3NzU0Mw==&mid=2247483768& ...

  6. iOS 动画之CoreAnimation(CALayer)

    CoreAnimation基本介绍 CoreAnimation动画位于iOS框架的Media层 CoreAnimation动画实现需要添加QuartzCore.Framework CoreAnimat ...

  7. iOS开发CoreAnimation解读之四——Layer层动画内容

    iOS开发CoreAnimation解读之四--Layer层动画内容 一.引言 通过前几篇博客的介绍,我们可以了解到layer层可以设置许多与控件UI相关的属性,并且对于iOS开发,UIView层的属 ...

  8. CGAffineTransform与CATransform3D

    CGAffineTransform 1.CG的前缀告诉我们,CGAffineTransform类型属于Core Graphics框架,Core Graphics实际上是一个严格意义上的2D绘图API, ...

  9. CATransform3D的m34值动画

    CATransform3D的m34值动画 效果 源码 https://github.com/YouXianMing/Animations // // CATransform3DM34Controlle ...

  10. GIF动画,菊花动画,UIView动画,CoreAnimation动画(CALayer动画)的用法

    1.GIF动画 1 // 创建一个显示图片的imageView // viewController创建 2 UIImageView *showGifImageView = [[UIImageView ...

最新文章

  1. MAT之GA:GA优化BP神经网络的初始权值、阈值,从而增强BP神经网络的鲁棒性
  2. C++/CLI Winform中调用DLL的三种方法
  3. 采用vue-cli安装的一些注意点
  4. 利用Topshelf把.NET Core Generic Host管理的应用程序部署为Windows服务
  5. asp.net 一个简易权限的小例子设计
  6. centos php日志分析,记录一下CentOS7安装GoAccess日志分析工具
  7. 监督学习 | 线性回归 之正则线性模型原理及Sklearn实现
  8. MakersPlace将启动1美元特价的Beeple限量NFT抽奖活动
  9. PERL 使用IO::Socket::INET模块实现socket编程
  10. 【人脸识别】基于matlab GUI PCA人脸二维码识别(带面板)【含Matlab源码 754期】
  11. pktgen-dpdk 进行rfc2544测试
  12. 机器人编程常用语言汇总(WeDo/EV3/Arduino/Scratch)
  13. RS485/RS422接线图
  14. Hoo Smart Chain 万物生长计划火热报名中,可视化公链迸发勃勃生机
  15. 西门子PLC中DB与DI有什么区别
  16. 【分库分表】ShardingSphere分库分表实战
  17. 网络监控系统安装的六种传输方式
  18. Hystrix服务降级的两种处理方式@HystrixCommand注解和定义统一fallback接口
  19. 关于spring配置文件context:property-placeholder
  20. IBM V7000存储升级微码

热门文章

  1. Linux的常用命令练习
  2. python中的编码问题 1
  3. Excel导入导出组件的设计
  4. 同步异步、阻塞非阻塞
  5. C++ STL算法系列4---unique , unique_copy函数
  6. 正确理解WPF中的TemplatedParent
  7. 致力于绿色环保的美国大型数据中心
  8. python学习笔记之列表(list)
  9. 深入理解Java Proxy机制
  10. python 网络请求类库 requests 使用