CGAffineTransform 原理

参考:http://guxiaojje.blog.163.com/blog/static/14094229120131510359399/

http://www.buildapp.net/iphone/show.asp?id=10192

矩阵的基本知识:

struct CGAffineTransform

{
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};

CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty);

为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。

以上参数在矩阵中的表示为:

 |a    b    0|

 |c    d    0|

 |tx   ty   1|

The identity transform: [ 1 0 0 1 0 0 ].

CG_EXTERN const CGAffineTransform CGAffineTransformIdentity

/* Return the transform [ a b c d tx ty ].  可控制变换任何变化*/

CG_EXTERN CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)

/* Return a transform which translates by `(tx, ty)':  t' = [ 1 0 0 1 tx ty ]  控制位移*/

CG_EXTERN CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

/* Return a transform which scales by `(sx, sy)':  t' = [ sx 0 0 sy 0 0 ]   控制缩放*/

 CG_EXTERN CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)

/* Return a transform which rotates by `angle' radians: t' = [ cos(angle) sin(angle) -sin(angle) cos(angle) 0 0 ]  控制旋转*/

 CG_EXTERN CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

=====================

简单记忆:

在使用矩阵控制图片的缩放和旋转的时候,CGAffineTransformMake(a,b,c,d,tx,ty);
这几个参数里面,哪些是控制缩放,哪些是控制旋转:
a,d缩放;
b,c旋转;
tx,ty位移。
 
基础的2D矩阵,文档里有。
原文地址:https://www.cnblogs.com/bunsman/p/3142587.html