图层的两个属性指定了变换矩阵:transform 和 sublayerTransform 属性 .
图层的transform 属性指定的矩阵结合图层的 anchorPoint 属性作用于图层和图层的子图层上面。
图层的 sublayerTransform 属性指定的矩阵只会影响图层的子图层,而不会对图层本身产生影响。
你可以通过以下的任何一个方法改变 CATransform3D 的数据结构: 使用CATransform3D函数
直接修改数据结构的成员
使用键-值编码改变键路径
CATransform3DIdentity 是单位矩阵,该矩阵没有缩放、旋转、歪斜、透视。把该矩阵应用到图层上面,会把图层几何属性修改为默认值。
使用变换函数可以在核心动画里面在操作矩阵。你可以使用这些函数(如下表)去创建一个矩阵一般后面用于改变图层或者它的子图层的 transform 和sublayerTransform属性。变换函数或者直接操或者返回一个CATransform3D的数据结构。这可以让你能够构建简单或复杂的转换,以便重复使用。
CATransform3DMakeTranslation
CATransform3DMakeScale
CATransform3DMakeRotation
CATransform3DTranslate
CATransform3DScale
CATransform3DRotate
函数及用途
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;};
struct CATransform3D
{
CGFloat m11(x缩放), m12(y切变), m13(旋转), m14();
CGFloat m21(x切变), m22(y缩放), m23(), m24();
CGFloat m31(旋转), m32(), m33(), m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。正直/负值都有意义);
CGFloat m41(x平移), m42(y平移), m43(z平移), m44();
};
ps:整体比例变换时,也就是m11==m22时,若m33>1,图形整体缩小,若0<m33<1,图形整体放大,若s<0,发生关于原点的对称等比变换。
()空的地方以后补充。
参见:http://kirenenko-tw.blogspot.com/2012/12/core-animation_11.html
代码:https://github.com/robin2013/CATransform3D_Study.git
代码参考了http://rocry.com/2012/12/19/3d-icon-wall/,不同的是原作者用了uiview动画实现,我用的是事务