一.说明
先来看CGAffineTransform类的定义
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
其实它是一个3X3的矩阵 ,表明a={1,1},b={1,2},c={2,1},d={2,2},tx={3,1},ty={3,2}
仿射变换公式:,结果:
表明变换后的点向量(x’,y’)是由(x,y)经矩阵变换而来。
二.函数及使用
1、创建类
CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b,
CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)
说明:创建一个变换,设置的参数都是矩阵对应的值
CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,
CGFloat ty)
说明:创建一个平移变换,对应的矩阵为t = [1 0 0, 0 1 0, tx ty 1],即在x轴方向上平移了tx个单位,在Y轴方向上平移了ty个单位。
CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
说明:创建一个缩放变换,对应的矩阵为
t = [sx 0 0, 0 sy 0, 0 0 1],仿射点向量x' = x*sx,y' = y*sy,x轴乘以缩放的值,y轴乘以相应的变换值。
CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
说明:创建一个旋转变换,对应的矩阵为t = [cos(angle) sin(angle) 0, -sin(angle) cos(angle) 0, 0 0 1],仿射后的向量x' = xcosa - ysina, y' = xsina + cosa。
2、修改类
CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t,
CGFloat tx, CGFloat ty)
说明:在一个变换后再增加一个平移变换。
CGAffineTransform CGAffineTransformScale(CGAffineTransform t,
CGFloat sx, CGFloat sy)
说明:在一个变换后再增加一个缩放变换
CGAffineTransform CGAffineTransformRotate(CGAffineTransform t,
CGFloat angle)
说明:在一个变换后再增加一个旋转变换。
CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)
说明:按这个变换的逆变换进行变换。
CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1,
CGAffineTransform t2)
说明:串联两个变换,由t1和t2两个矩阵相乘获得一个新的矩阵进行变换(矩阵运算不可逆,前后顺序必须正确,否者结果会不一样)。
3、运用类
CGPoint CGPointApplyAffineTransform(CGPoint point,
CGAffineTransform t)
说明:对一个point进行t的变换。
CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t)
说明:对一个size进行t的变换。
CGRect CGRectApplyAffineTransform(CGRect rect, CGAffineTransform t)
说明:对一个rect进行t的变换。
4、检测对比类
bool CGAffineTransformIsIdentity(CGAffineTransform t)
说明:恒等变换,类似于初始化(场景:例如进行一个变换之后,如果不设置恒等,再次设置另一个变换,这个变换并不是自己想要的)。
bool CGAffineTransformEqualToTransform(CGAffineTransform t1,
CGAffineTransform t2)
说明:对比t1和t2变换是否相等。