[iOS] UIView的transform屬性詳解

UIView的transform屬性
        transform是view的一個重要屬性,它在矩陣層面上改變view的顯⽰狀態,能實現view的縮放、旋轉、平移等功能。transform是CGAffineTransform類型的。使用transform後view的frame被真實改變的。
struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};


              transform詳解
在view可以看做有很多像素塊構成,可以用(x,y)代表一個像素塊,x爲寬,y爲高。transform就是改變每個像素塊的形狀。在運算過程中,[x,y,1]表示原來的像素塊,而新的像素塊[xn,yn,1]是由[x,y,1]乘以矩陣
{
a, b, 0
c, d, 0
tx,ty,1
}生成的。化簡矩陣相乘,公式爲
xn=ax+cy+tx;
yn=bx+dy+ty;
這個矩陣的第三列是固定的,所以每次變換時,只需傳入前兩列的六個參數[a,b,c,d,tx,ty]即可。
在CGAffineTransform的生成函數中,大多是兩兩對應的,一個帶make字樣,一個沒有。帶make字樣的是直接生成一個新的CGAffineTransform,沒有make字樣的則是在一個CGAffineTransform的基礎上生成新的。函數返回值均是CGAffineTransform類型。

// 實現的是放大和縮小,在原來transform的基礎上生成一個新的transform。生成新的transform相當於將t' = [sx ,0 ,0,sy ,0, 0]這六個參數代入矩陣中。則矩陣爲[
sx,0 ,0
0 ,sy,0
0 ,0 ,1
];代入公式中,xn=(sx)*x,yn=(sy)*y。所以sx,sy分別代表x軸與y軸上的放大倍數。

CGAffineTransformScale(CGAffineTransform t,
  CGFloat sx, CGFloat sy);
CGAffineTransformMakeScale(CGFloat sx, CGFloat sy);
//實現的是旋轉。angle爲角度,angle=π則旋轉180度。矩陣的六個參數爲t' =  [ cos(angle),sin(angle),-sin(angle),cos(angle) 0,0];
CGAffineTransformRotate(CGAffineTransform t,
  CGFloat angle)
CGAffineTransformMakeRotation(CGFloat angle);
//實現的是平移,矩陣的六個參數爲t' = [1,0,0,1,tx,ty] ;代入公式,xn=x+tx,yn=y+ty。
CGAffineTransformTranslate(CGAffineTransform t,
  CGFloat tx, CGFloat ty);
CGAffineTransformMakeTranslation(CGFloat tx,
  CGFloat ty);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章