zoukankan      html  css  js  c++  java
  • CATransform3D 讲解

    最近看到一个3D动画效果,决定认真就研究一下。从网上看到很多介绍,下面详细的讲解一下CATransform3D

    CATransform3D结构成员的意义。 

    structCATransform3D

    {

    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,发生关于原点的对称等比变换。

    CATransform3DIdentity 是4x4单位矩阵,该矩阵没有缩放,旋转,歪斜,透视。该矩阵应用到图层上,就是设置默认值。结构成员的值如下

    [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1]

    1. CATransform3DMakeTranslation (CGFloat tx, CGFloat ty, CGFloat tz)

    tx:X轴偏移位置,往下为正数。(x轴方向为上下)

    ty:Y轴偏移位置,往右为正数。 (y轴方向为左右)

    tz:Z轴偏移位置,往外为正数。(z轴方向为里外,往外就是说指向你的方向为正)

    具体来说tz的值越大,图层就越向外靠近,有3D效果

    官方文档说明

    Returns a transform that translates by '(tx, ty, tz)'. t' = [1 0 0 0; 0 1 0 0; 0 0 1 0; tx ty tz 1].

     

    2.CATransform3DTranslate (CATransform3D t, CGFloat tx, CGFloat ty, CGFloat tz);

    t:就是上一个函数。其他的都一样。

    就可以理解为:函数的叠加,效果的叠加。

    func CATransform3DTranslate(t: CATransform3D, _ tx: CGFloat, _ ty: CGFloat, _ tz: CGFloat) -> CATransform3D

     

    Translate 't' by '(tx, ty, tz)' and return the result: t' = translate(tx, ty, tz) * t.

    上边是官方的解释,根据官方的解释就是在原有的 t 的基础上进行形变,返回行遍之后的 t 

    3.CATransform3DMakeScale (CGFloat sx, CGFloat sy, CGFloat sz);

    官方说明

    Returns a transform that scales by `(sx, sy, sz)': * t' = [sx 0 0 0; 0 sy 0 0; 0 0 sz 0; 0 0 0 1].

    sx:X轴缩放,代表一个缩放比例,一般都是 0 --- 1 之间的数字。

    sy:Y轴缩放。

    sz:整体比例变换时,也就是m11(sx)== m22(sy)时,若m33(sz)>1,图形整体缩小,若0<1,图形整体放大,若m33(sz)<0,发生关于原点的对称等比变换。

    当sx = 1,sy = 1时。如图:

    当sx = 0.5,sy = 0.5时。如图:

    4.CATransform3DScale (CATransform3D t, CGFloat sx, CGFloat sy, CGFloat sz)

    t:就是上一个函数。其他的都一样。

    就可以理解为:函数的叠加,效果的叠加。

    5.CATransform3DMakeRotation (CGFloat angle, CGFloat x, CGFloat y, CGFloat z);

    旋转效果。

    angle:旋转的弧度,所以要把角度转换成弧度:角度 * M_PI / 180。

    x:向X轴方向旋转。值范围-1 --- 1之间

    y:向Y轴方向旋转。值范围-1 --- 1之间

    z:向Z轴方向旋转。值范围-1 --- 1之间

    ps: 向 X轴,Y轴都旋转,就是沿着对角线旋转。

    6.CATransform3DRotate (CATransform3D t, CGFloat angle, CGFloat x, CGFloat y, CGFloat z);

    t:就是上一个函数。其他的都一样。

    就可以理解为:函数的叠加,效果的叠加。

    7.CATransform3DInvert (CATransform3D t);

    翻转效果

    8.CATransform3DGetAffineTransform (CATransform3D t);

    bool CATransform3DIsAffine (CATransform3D t);

    仿射效果。

    就是把一个 CATransform3D 对象转换成一个 CGAffineTransform 对象。

    也就是把 CATransform3D 矩阵 转换成 CGAffineTransform 矩阵

    变换函数同时提供了可以比较一个变换矩阵是否是单位矩阵,或者两个矩阵是否相等。

    9.bool CATransform3DIsIdentity (CATransform3D t);

    返回bool判断是不是单位形变

    bool CATransform3DEqualToTransform (CATransform3D a, CATransform3D b);

    返回bool 判断两个形变是否相同

    除了这些 

    也可以直接通过修改数据结构和键值来设置变换效果。通过修改矩阵中不同的值来达到3d变换效果

  • 相关阅读:
    docker内存和cpu调试
    docker网络之overlay
    docker网络之bridge
    kubernete的证书总结
    docker网络之macvlan
    理解kubernetes环境的iptables
    前端面试题和答案
    软件项目技术点(25)——提升性能之检测绘制范围
    setTimeout的实现原理以及setTimeout(0)的使用场景
    HTML5新特性之WebSocket
  • 原文地址:https://www.cnblogs.com/qiutangfengmian/p/5590202.html
Copyright © 2011-2022 走看看