transform是view的一个重要属性,它在矩阵层面上改变view的显⽰状态,能实现view的缩放、旋转、平移等功能。transform是CGAffineTransform类型的。使用transform后view的frame被真实改变的。struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty;};
transform详解
在view可以看做有很多像素块构成,可以用(x,y)代表一个像素块,x为宽,y为高。transform就是改变每个像素块的形状。在运算过程中,[x,y,1]表示原来的像素块,而新的像素块[xn,yn,1]是由[x,y,1]乘以矩阵{a, b, 0c, d, 0tx,ty,1}生成的。化简矩阵相乘,公式为xn=ax+cy+tx;yn=bx+dy+ty;这个矩阵的第三列是固定的,所以每次变换时,只需传入前两列的六个参数[a,b,c,d,tx,ty]即可。在CGAffineTransform的生成函数中,大多是两两对应的,一个带make字样,一个没有。带make字样的是直接生成一个新的CGAffineTransform,没有make字样的则是在一个CGAffineTransform的基础上生成新的。函数返回值均是CGAffineTransform类型。// 实现的是放大和缩小,在原来transform的基础上生成一个新的transform。生成新的transform相当于将t' = [sx ,0 ,0,sy ,0, 0]这六个参数代入矩阵中。则矩阵为[sx,0 ,00 ,sy,00 ,0 ,1];代入公式中,xn=(sx)*x,yn=(sy)*y。所以sx,sy分别代表x轴与y轴上的放大倍数。CGAffineTransformScale(CGAffineTransform t, CGFloat sx, CGFloat sy);CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);//实现的是旋转。angle为角度,angle=π则旋转180度。矩阵的六个参数为t' = [ cos(angle),sin(angle),-sin(angle),cos(angle) 0,0];CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)CGAffineTransformMakeRotation(CGFloat angle);//实现的是平移,矩阵的六个参数为t' = [1,0,0,1,tx,ty] ;代入公式,xn=x+tx,yn=y+ty。CGAffineTransformTranslate(CGAffineTransform t, CGFloat tx, CGFloat ty);CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
转载于:https://www.cnblogs.com/BJTUzhengli/p/5131290.html
相关资源:JAVA上百实例源码以及开源项目