首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >iOS transform(2D仿射)

iOS transform(2D仿射)

作者头像
大壮
发布2018-06-19 14:40:04
发布2018-06-19 14:40:04
7610
举报
文章被收录于专栏:大壮大壮

主要分3个部分说明。

1.基础及矩阵概念

2.2D仿射

3.3D仿射

1.CGAffineTrans的API

带Make的:起点固定,每次控制的事件只针对起点。

不带Make的:为一个变换再加上平移,针对上一个位置,不针对起点。

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

2.仿射变换概念

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

平移演化

代码语言:javascript
复制
//仿射矩阵
//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。

再来看看方法:

代码语言:javascript
复制
向右移动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,下一章再讲解。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.CGAffineTrans的API
  • 2.仿射变换概念
  • 3.Tip
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档