在开发中我们有时需要对视图做旋转和缩放,iOS提供了三种仿射变换:平移、旋转、和缩放。
一、仿射变换
每个仿射变换可以由一个矩阵A和一个向量b给出,它可以写作A和一个附加的列b。一个仿射变换对应于一个矩阵和一个向量的乘法,而仿射变换的复合对应于普通的矩阵乘法。
CGAffineTransform结构体
struct CGAffineTransform {
CGFloat a, b, c, d;
CGFloat tx, ty;
};
CGAffineTransform实际上是一个矩阵
| a, b, 0 |
| c, d, 0 |
| tx, ty, 1 |
这个矩阵是用来标记这个View的变化,可以是旋转,缩放,平移。
也就是说,View的坐标为 {x,y},变化后的坐标是{x’,y’}
| a, b, 0 |
{x',y',1}={x,y,1} x | c, d, 0 |
| tx, ty, 1 |
二、创建Transformations
1、直接创 建
使用CGAffineTransformMake函数
CGAffineTransform CGAffineTransformMake (
CGFloat a,
CGFloat b,
CGFloat c,
CGFloat d,
CGFloat tx,
CGFloat ty
);
参数比较多,很少使用。
2、创建缩放变换
使用CGAffineTransformMakeScale函数
CGAffineTransform CGAffineTransformMakeScale (CGFloat sx, CGFloat sy);
sx为宽度缩放因子,sy为高度缩放因子。假设是一个图片视图引用了这个变换,那么图片的宽度就会变为 width*sx ,对应高度变为 hight * sy。
3、创建旋转变换
使用CGAffineTransformMakeRotation函数
CGAffineTransform CGAffineTransformMakeRotation ( CGFloat angle);
以弧度为参数,表示要旋转的度数。
4、创建平移变换
使用CGAffineTransformMakeTranslation函数
CGAffineTransform CGAffineTransformMakeTranslation (CGFloat tx,CGFloat ty);
设置一个视图的transform属性,那么它的起始位置 x 会加上tx , y 会加上 ty
三、修改Transformations
1、对传入的变换加上平移
CGAffineTransformTranslate
CGAffineTransform CGAffineTransformTranslate (
CGAffineTransform t,
CGFloat tx,
CGFloat ty
);
2、对传入的变换加上缩放
CGAffineTransformScale
CGAffineTransform CGAffineTransformScale (
CGAffineTransform t,
CGFloat sx,
CGFloat sy
);
3、对传入的变换加上旋转
CGAffineTransformRotate
CGAffineTransform CGAffineTransformRotate (
CGAffineTransform t,
CGFloat angle
);
4、反转传入的变换
CGAffineTransformInvert
CGAffineTransform CGAffineTransformInvert (CGAffineTransform t);
5、合并两个变换
CGAffineTransformConcat
CGAffineTransform CGAffineTransformConcat (CGAffineTransform t1, CGAffineTransform t2);
返回一个由 t1 和 t2 合并而成的Transformation