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();
};