主要由这几个方法
CGAffineTransformMakeTranslation(平移)
CGAffineTransformMakeScale(缩放)
CGAffineTransformMakeRotation(旋转)
CGAffineTransformIdentity(还原到之前的状态)
另外还有几个叠加 ,大致意思是在一个transfrom基础上再做一次transform
CGAffineTransformTranslate
CGAffineTransformScale
CGAffineTransformRotate
接下来我们看下矩阵,这个是核心。
首先了解下矩阵的基础知识,矩阵乘法如图1
矩阵乘法有个前提条件,AB的话, A的列需要和B的行数相等。
那么我们来看,transform 怎么用到矩阵的,如图2
然后利用公式尽行套用,发现
CGAffineTransformMake(CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty)
平移:
如果 c,b,d =0,a=1 那么 tx 就是图形按照x轴移动的距离,因此我们可以这样来表示x轴平移。
CGAffineTransformMake(1,0,0,1,100,0) ;
同理y轴平移的话
CGAffineTransformMake(1,0,0,1,0,100) ;
那么,x y 轴同时移动呢?你可以自己写下试试看。
再看缩放:
如果b、d、tx、ty = 0,a 、d = 2, 那么新坐标x' = 2x,y' = 2y;
CGAffineTransformMake(2,0,0,2,0,0)
你也可以试试,a 和 d 用不同的值,看看效果。
最后我们看下旋转:
CGAffineTransformMake(CGFloat( cos(M_PI_4) ), CGFloat( sin(M_PI_4) ), -CGFloat( sin(M_PI_4) ), CGFloat( cos(M_PI_4) ), 0, 0)
这里用到sin cos 等函数,原理和上面一样。
例子中用的都是 CGAffineTransformMake 方法,
我们直接用 会更方便。
CGAffineTransformMakeTranslation(100,100)
CGAffineTransformMakeScale(2,2)
CGAffineTransformMakeRotation(M_PI_4);
完毕。