主要分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,下一章再讲解。
网友评论