序言: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的矩陣。