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来控制







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值