序言:CGAffineTransform可以完成二维的平移、旋转、缩放变换,其本质都是就是仿射变换。一个任意的仿射变换都能表示为乘以一个矩阵 (线性变换) ,接着再加上一个向量 (平移)。以上三种变换可以归纳为平移 (向量加),旋转 (线性变换),缩放 (线性变换)。
- 先来看一下CGAffineTransform的定义:
struct CGAffineTransform { CGFloat a, b, c, d; CGFloat tx, ty; }; CGAffineTransformMake(CGFloat a, CGFloat b,CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)
对应的矩阵为:
CGAffineTransform.png
对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:
tranform.png
-
CGAffineTransformIdentity
identity.png
同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:
1.png - CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
2.png
同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:
3.png
-
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
4.png
同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:
5.png -
CGAffineTransformMakeRotation(CGFloat angle)
6.png
同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:
7.png
整理后,说明变换后坐标落于同一个圆上。
8.png
以上就是CGAffineTransform仿射变换,参照链接:http://xummer26.com/blog/CGAffineTransform-simple-analysis.html。
- 后面我会再分享一篇关于CATransform3D的文章,CATransform3D是一个可以在3维空间内做变换的4x4的矩阵。