前言
顧名思義衷咽,就是對視圖進行變換的一組函數(shù)功能,其中前者是對視圖進行2D變換污呼,后者是進行3D變換,而這都是屬于core Graphics層的功能烫扼,并且主要作用于CALayer層曙求;
視圖的變換主要包括平移,縮放映企,旋轉悟狱,其核心是視圖上的點和矩陣相乘之后產生的結果;
CGAffineTransform
首先來看CGAffineTransform堰氓,2D變換挤渐,即平面變換;其中平面上的點可以表示成一個1*3的矩陣[x , y , 1]双絮,來看看CGAffineTransform的結構體組成
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
CGAffineTransform其實表示成一個3*3的矩陣就是:1.jpg.jpeg
2.jpg.jpeg
x’ = ax + cy + tx; y’ = bx + dy + ty;
若c = b = 0時,a會影響x方向的縮放软免,d會影響y方向的縮放宫纬,tx會影響x方向的位移,ty會影響y方向的位移膏萧;
當b和c不等于0時漓骚,可以看到其在另一方向上發(fā)生了變化,即發(fā)生了旋轉榛泛;
CGAffineTransform中的函數(shù)
CGAffineTransformIdentity:
3.jpg.jpeg
4.jpg.jpeg
5.jpg.jpeg
6.jpg.jpeg
CATransform3D
在2D的基礎上多加了z軸上的變換曹锨,即三維空間上的變換
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
我們可以看到是一個4 * 4的矩陣孤个,這個時候可以將我們的視圖看成4*1的矩陣,相乘即沛简,
1.png.png
x’ = m11x + m21y + m31z + m41;
y’ = m12x + m22y + m32z + m42;
z’ = m13x + m23y + m33z + m43;
根據(jù)以上的結果可以得出如下結論:
m11控制x方向上的縮放齐鲤,m41控制x方向上的平移;
m22控制y方向上的縮放覆享,m42控制y方向上的平移佳遂;
m33控制z方向上的縮放,m43控制z方形上的平移撒顿;
和2D變換一樣m21,m31,m12,m32,m13,m23控制旋轉丑罪,那么他們都是怎么影響哪一個軸上的變化呢,這里有一片文章凤壁,從中可以得出:
2.png.png
m32和m23共同影響x軸的旋轉吩屹;
m13和m31共同影響y軸的旋轉;
m12和m21共同影響z軸的旋轉拧抖;
同時煤搜,CATransform3D也有函數(shù),同2D一樣唧席,這里就不多做闡述了~~
其中m34為透視效果擦盾,其他幾個暫不得知~~
最后,希望本篇文章對大家會有幫助淌哟。