天天看點

ios動畫系列 -- UIView的transform

制作動畫時UIView和CALayer的transform是最常用的屬性。通過對這個屬性的操作,可以很友善的改變對象的大小,方向,位置。不同的是UIView操作的是3x3的matrix,而CALayer的是4x4的。

matrix的結構如下

[a, b, 0]
[c, d, 0]
[tx,ty,1]
           

第3列的數值一直是(0,0,1),矩陣轉換隻用到前2列

矩陣如何轉換成坐标值呢?比如一個_button的frame值是(24,50,100,100), 預設矩陣值為CGAffineTransformIdentity

[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
           
X1 = ax + cy + tx = 24 * 1 + 50 * 0 + 0 = 24;
Y1 = bx + dy + ty = 24 * 0 + 50 * 1 + 0 = 50;  
           

現在向右平移20,再向下平移30要怎麼做呢?

_button.transform = CGAffineTransformMakeTranslation(20, 30);
//傳回的結構如下
[1, 0, 0]
[0, 1, 0]
[20, 30, 1]
           

移動需要改變tx, ty。

接下來寬放大1.5倍,高放大1.4倍

_button.transform = CGAffineTransformMakeScale(1.5f, 1.4f);
//傳回的矩陣結構如下
[1.5f, 0, 0]
[0, 1.4f, 0]
[0, 0, 0]
           

縮放需要改變a, d  正數放大,負數縮小。

旋轉90度

_button.transform = CGAffineTransformMakeRotation(M_PI / 2);
//傳回的矩陣結構如下
[cosA, sinA, 0]
[-sinA, cosA, 0]
[0, 0, 1]
           

旋轉需要改變a, b, c, d。順便提一下弧度值的計算方法

360 = 2 * 3.14(PAI);

180 = 3.14(PAI);

正弧度逆時鐘旋轉,負弧度順時鐘旋轉

以上就是矩陣的基本操作方法,transform屬性的說明就到這裡。

如果要實作動畫可以使用BeginAnimations和commitAnimations來控制

繼續閱讀