美文网首页
CGAffineTransform与CATransform3D的

CGAffineTransform与CATransform3D的

作者: 给伤的你我依然喜欢 | 来源:发表于2017-08-17 15:06 被阅读26次

                                   CGAffineTransform(是一个3*3的矩阵)

    默认矩阵
    系统定义的矩阵结构
    通过矩阵的相乘得到显示的每个点的坐标

    X'=ax+cy+tx;

    Y'=bx+dy+ty;

    其中a是控制x的缩放比例,d是控制y的缩放比例;

    x会跟着c的值进行拉伸(c*y,与y有关系),y会跟着b的值进行拉伸(b*x,说明x有关),要注意到的是c和b的值改变不会影响到View的point(center中心点)的改变。这是个很有意思的两个参数。其实,这里返回的就是每个点的坐标。b,c的值不会影响到center。当我们改变b ,c的时候,我们所计算出来的点形成的view的center,并不是原来的center。我们需要把对view进行平移,到原来的中心点,这样才是view显示出来的frame。

    测试代码

    显然原来的frame:(50,50,100,100)

    改变c的值后的frame:(0,50,200,100)

    现在让我们来计算一下:1.取出view的四个顶点(50,50),(150,50),(50,150),(150,150)。

    2.计算这四个顶点结果分别于矩阵| 1 0 0  |      

                                                           | 1 1  0  |

                                                           | 0 0  1  |                                                                          

    想乘结果为 (100,50)(200,50)(200,150) (300,150)

    相连后是一个平行四边形。所在的矩阵frame为(100 ,50 ,200,100),center(200,100)。因为center(原来的center(100,100))不变,需要左平移动   100      ,那么得到的frame是(0,50,200,100)。与运行得到的frame是一样的。    

    x会跟着t.x进行x做表平移,y会跟着t.y进行平移。这里的point(center)是跟着变换的


    CGAffineTransformInvert(CGAffineTransf)是将 b , c, tx ,ty变成原来的相反数(-b,-c,-tx,-ty)矩阵。如果你设置的矩阵,运行log打印:CGAffineTransformInvert: singular matrix。那么你不会得到反转后的矩阵,会还是原来的矩阵。

    ①CGPointApplyAffineTransform(CGPoint point,CGAffineTransform t)  得到转化后point CGPoint

    ②CGSizeApplyAffineTransform(CGSize size,CGAffineTransform t)          得到转化后size CGSize

    ③CGRectApplyAffineTransform(CGRect rect,CGAffineTransform t)        得到转化后rect CGRect




                                             CATransform3D(4*4矩阵)

    {

    CGFloat m11(x缩放), m12(y切变), m13(), m14();

    CGFloat m21(x切变), m22(y缩放), m23(), m24();

    CGFloat m31(), m32(), m33(), m34(透视效果,要操作的这个对象要有旋转的角度,否则没有效果。当然,z方向上得有变化才会有透视效果(就是近大远小));

    CGFloat m41(x平移), m42(y平移), m43(z平移), m44();

    };

    相关文章

      网友评论

          本文标题:CGAffineTransform与CATransform3D的

          本文链接:https://www.haomeiwen.com/subject/irmgrxtx.html