CoreAnimation-CATransform3D-1

来源:互联网 发布:ae2015cc mac破解版 编辑:程序博客网 时间:2024/06/08 06:45

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结构的定义,结构成员位于相应的矩阵位置上。

未完待续。。。。。。

0 0
原创粉丝点击