制作動畫時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來控制