iOS transform(2D仿射)

96
userName
2018.04.24 17:57* 字数 228

主要分3个部分说明。
1.基础及矩阵概念
2.2D仿射
3.3D仿射

1.CGAffineTrans的API

带Make的:起点固定,每次控制的事件只针对起点。
不带Make的:为一个变换再加上平移,针对上一个位置,不针对起点。

//位移仿射
CGAffineTransformMakeTranslation
CGAffineTransformTranslate
//旋转仿射
CGAffineTransformMakeRotation
CGAffineTransformRotate
//缩放仿射
CGAffineTransformMakeScale
CGAffineTransformScale
//叠加仿射效果
CGAffineTransformConcat
//仿射矩阵方法,可以直接做效果叠加
CGAffineTransformMake (sx,shx,shy,sy,tx,ty)

2.仿射变换概念

个人理解就是:点p(以二维坐标为例)通过仿射矩阵C 后变成新的点p' 。
平移演化

//仿射矩阵
//A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
//1行3列 * 3行3列 = 1行3列
[x,y,1] * [a  b  0] = [x',y',z']
          [c  d  0]
          [tx ty 1]


设a,d=1 c,b = 0 那么
x' = a*x + c*y + tx
y' = b*x + d*y + ty
z' = 0*x + 0*y + 1*1
就变成了
x' = x + tx
y' = y + ty

所以移动因子就是 tx ty。
再来看看方法:

向右移动300的仿射效果
CGAffineTransform translate = CGAffineTransformMakeTranslation(300, 0)
使用仿射基础方法 
CGAffineTransform translate = CGAffineTransformMake(1,0,0,1,300,0)
//CGAffineTransformMake(CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty)

缩放演化,旋转演化以上类似。

3.Tip

通过CGAffineTrans就可以实现贴纸的功能,根据手势对贴纸进行放大,缩小,旋转等功能。
我写的DEMO:点这跳转,记得点Star

关于翻转和一些3D变化就需要 CATransform3D,下一章再讲解。

日记本
Web note ad 1