深入iOS開發 iOS仿射變換和3D變換

2021-08-28 01:52:57 字數 1364 閱讀 8716

2d仿射變換

uiview的transform屬性是乙個cgaffinetransform型別,用於在二維空間做旋轉,縮放和平移。cgaffinetransform是乙個可以和二維空間向量(例如cgpoint)做乘法的3x2的矩陣:

1240

paste_image.png

當對uiview應用變換矩陣,uiview圖層矩形內的每乙個點都被相應地做變換,從而形成乙個新的四邊形的形狀。cgaffinetransform中的「仿射」的意思是無論變換矩陣用什麼值,圖層中平行的兩條線在變換之後任然保持平行.

單位矩陣

cgaffinetransformidentity

cgaffinetransform transform = cgaffinetransformidentity;

結果:(cgaffinetransform) transform = (a = 1, b = 0, c = 0, d = 1, tx = 0, ty = 0)

建立仿射變換矩陣

cgaffinetransformmakerotation(cgfloat angle) // 旋轉

cgaffinetransformmakescale(cgfloat sx, cgfloat sy) // 縮放

cgaffinetransformmaketranslation(cgfloat tx, cgfloat ty) // 平移

cgaffinetransform transform = cgaffinetransformmakerotation(m_pi_4);

結果 :

(cgaffinetransform) transform = (a = 0.70710678118654757, b = 0.70710678118654746, c = -0.70710678118654746, d = 0.70710678118654757, tx = 0, ty = 0)

cgaffinetransform transform = cgaffinetransformmakescale(0.8, 0.8);

結果:(cgaffinetransform) transform = (a = 0.80000000000000004, b = 0, c = 0, d = 0.80000000000000004, tx = 0, ty = 0)

cgaffinetransform transform = cgaffinetransformmaketranslation(10, 10);

結果:(cgaffinetransform) transform = (a = 1, b = 0, c = 0, d = 1, tx = 10, ty = 10)

1240

paste_image.png

圖中,灰色為舊圖,藍色為變化後的新圖.

iOS開發之仿射變換示例總結

本篇部落格比較簡單,但還是比較實用的。其中的示例依然使用swift3.0來實現,該部落格算是下篇部落格的乙個引子,因為我們下篇部落格要介紹使用swift開發ios應用中常用的一些extension。而在這些extension中的image extension中會用到仿射變換的東西來對進行處理。所以本...

iOS開發之仿射變換示例總結

本篇部落格比較簡單,但還是比較實用的。其中的示例依然使用swift3.0來實現,該部落格算是下篇部落格的乙個引子,因為我們下篇部落格要介紹使用swift開發ios應用中常用的一些extension。而在這些extension中的image extension中會用到仿射變換的東西來對進行處理。所以本...

Transform仿射變換和原理

uiview有乙個transform屬性,cgaffinetransform 可以操控二維平面內控制項的平移 旋轉和縮放。這三種型別的圖形變換可以使用 cgaffinetransformmake 通過設定引數實現 其實為矩陣中的引數設定 但ios開發中,蘋果為我們提供了更加方便的介面,如下 cgaf...