CGAffineTransform介紹
-
CGAffineTransform數(shù)據(jù)結(jié)構(gòu)表示用于仿射變換的矩陣。 transformation制定了如何將一個坐標系的點映射到另一個坐標系上。一個仿射變換是一種特殊類型的映射,保留一條平行線,但不一定保留長度或角度??s放,旋轉(zhuǎn),位置變化是最常用的操作支持的仿射變換,但扭曲也是可能的。
Quartz提供了創(chuàng)建、連接和用CGAffineTransform實現(xiàn)的transformations的函數(shù)。想獲得更多信息,請參考Quartz 2D Programming Guide.
我們通常不需要直接創(chuàng)建一個仿射變換-- CGContext Reference描述了一個函數(shù)修改當前的放射變化。 但是如果你不想f復用仿射變化,你需要用到CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM, or CGContextConcatCTM.
函數(shù)
-
創(chuàng)建放射變換矩陣
-
CGAffineTransformMake:CGAffineTransform CGAffineTransformMake ( CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty );
-
參數(shù)在矩陣中表示如圖:
img 這個方法創(chuàng)建了 CGAffineTransform結(jié)構(gòu)體,描述了新的矩陣變換。你可以用(或復用,如果你想的話),去改變一個坐標系。 由于第三列為 [0,0,1],因此矩陣變化起作用只有前兩列。
如果你想transform一個對象,沒必要使用這個函數(shù)。因為有很多更直接的方法。
-
假設(shè)原坐標點為(X,Y,1)
|a b 0| [X,Y, 1] |c d 0| = [aX + cY + tx >bX + dY + ty 1] ; |tx ty 1|得到結(jié)果是: [ (aX+cY+tx) (bX+dY+ty) 1] ;
1.平移: a=d=1, b=c=0 -> [x + tx , y + ty] 這也就是
CGAffineMakeTranslation的原理2.縮放: b=c=tx=ty=0. [ax dy 1] 這也就是
CGAffineTransformMakeScale的原理3.旋轉(zhuǎn):設(shè)tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。 [aX + cY + tx bX + dY + ty 1] = [Xcos? - Ysin? Xsin? + Ycos? 1] ; 可見,這個時候,?就是旋轉(zhuǎn)的角度,逆時針為正,順時針為負。其實這也就是函數(shù)。 CGAffineTransformMakeRotation(CGFloat angle)的計算原理
CGAffineTransformMakeRotation: 旋轉(zhuǎn)CGAffineTransformMakeScale:scaleCGAffineTransformMakeTranslation
-
-
修改變換矩陣: 對已經(jīng)存在的矩陣變化進行修改
-
CGAffineTransformTranslate: 對橫豎位置進行修改 CGAffineTransformScaleCGAffineTransformRotate-
CGAffineTransformInvert:根據(jù)已經(jīng)存在的仿射變換進行變換
-CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t ); -
CGAffineTransformConcat:合并兩個變換
-
-
Applying Affine Transformations
-
CGPointApplyAffineTransform返回矩陣變換后的點的信息- CGPoint CGPointApplyAffineTransform ( CGPoint point, CGAffineTransform t );
CGSizeApplyAffineTransformCGRectApplyAffineTransform
-
-
Evaluating Affine Transforms 評測
-
CGAffineTransformIsIdentity是否是CGAffineTransformIsIdentity-
CGAffineTransformIdentity, 即單位矩陣
img
-
CGAffineTransformIdentity, 即單位矩陣
-
CGAffineTransformEqualToTransform檢驗變換是否是一樣
-