矩陣乘法 函數
A B相乘要A的列數等於B的行數纔有定義,結果是一個A行B列的矩陣C,C的每一個元素值爲A對應的行與B對應的列的元素乘積的和 spa
具體看這裏 code
原理 orm
CGAffineTransform ip
CGAffineTransform 的結構以下 get
struct CGAffineTransform { CGFloat a; CGFloat b; CGFloat c; CGFloat d; CGFloat tx; CGFloat ty; }; typedef struct CGAffineTransform CGAffineTransform;
它其實表示的是一個矩陣 it
由於最後一列老是是(0,0,1),因此有用的信息就是前面兩列 io
對一個view進行仿射變化就至關於對view上的每一個點作一個乘法 form
結果就是 基礎
基本上就是若是不看c和b的話
a表示x水平方向的縮放,tx表示x水平方向的偏移
d表示y垂直方向的縮放,ty表示y垂直方向的偏移
若是b和c不爲零的話,那麼視圖確定發生了旋轉
從上面的式子也能夠看出,仿射變化是不會對視圖的基本形狀發生該表的(矩形仍是矩形,不會變成平行四邊形,梯形)
常量
CGAffineTransformIdentity const CGAffineTransformCGAffineTransformIdentity;
這個就是沒有變化的最初的樣子
建立一個仿射矩陣
改變已經存在的放射矩陣
應用仿射矩陣
評測矩陣
應用
放射矩陣一個經常使用的情形就是根據用戶的手勢來相應的改變視圖的變換
UIPanGestureRecognizer 對應位移
UIPinchGestureRecognizer 對應縮放
UIRotationGestureRecognizer 對應旋轉
一般若是須要看到實時的手指移動視圖就相應的變換的技巧就是,每次接收到對應的gesture時間就相應的改變view的transform,而後吧這個gesture對應的translation、scale、rotation置爲初始值。