制作动画时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来控制