ios学习临时笔记-CGAffineTransform

一.说明

先来看CGAffineTransform类的定义
struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};

其实它是一个3X3的矩阵 A 3 by 3 matrix.,表明a={1,1},b={1,2},c={2,1},d={2,2},tx={3,1},ty={3,2}
仿射变换公式:A row vector multiplying a 3 by 3 matrix.,结果:Transformation equations.
表明变换后的点向量(x’,y’)是由(x,y)经矩阵变换而来。

二.函数及使用

1、创建类

CGAffineTransform CGAffineTransformMake(CGFloat a, CGFloat b,
  CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)
说明:创建一个变换,设置的参数都是矩阵对应的值

CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx,
  CGFloat ty)
说明:创建一个平移变换,对应的矩阵为t = [1 0 0, 0 1 0, tx ty 1],即在x轴方向上平移了tx个单位,在Y轴方向上平移了ty个单位。

CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
说明:创建一个缩放变换,对应的矩阵为 t = [sx 0 0, 0 sy 0, 0 0 1],仿射点向量x' = x*sx,y' = y*sy,x轴乘以缩放的值,y轴乘以相应的变换值。

CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)
说明:创建一个旋转变换,对应的矩阵为t = [cos(angle) sin(angle) 0, -sin(angle) cos(angle) 0, 0 0 1],仿射后的向量x' = xcosa - ysina, y' = xsina + cosa。

2、修改类

CGAffineTransform CGAffineTransformTranslate(CGAffineTransform t,
  CGFloat tx, CGFloat ty)
说明:在一个变换后再增加一个平移变换。

CGAffineTransform CGAffineTransformScale(CGAffineTransform t,
  CGFloat sx, CGFloat sy)
说明:在一个变换后再增加一个缩放变换

CGAffineTransform CGAffineTransformRotate(CGAffineTransform t,
  CGFloat angle)
说明:在一个变换后再增加一个旋转变换。

CGAffineTransform CGAffineTransformInvert(CGAffineTransform t)
说明:按这个变换的逆变换进行变换。

CGAffineTransform CGAffineTransformConcat(CGAffineTransform t1,
  CGAffineTransform t2)
说明:串联两个变换,由t1和t2两个矩阵相乘获得一个新的矩阵进行变换(矩阵运算不可逆,前后顺序必须正确,否者结果会不一样)。

3、运用类

CGPoint CGPointApplyAffineTransform(CGPoint point,
  CGAffineTransform t)
说明:对一个point进行t的变换。

CGSize CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t)
说明:对一个size进行t的变换。

CGRect CGRectApplyAffineTransform(CGRect rect, CGAffineTransform t)
说明:对一个rect进行t的变换。

4、检测对比类

bool CGAffineTransformIsIdentity(CGAffineTransform t)
说明:恒等变换,类似于初始化(场景:例如进行一个变换之后,如果不设置恒等,再次设置另一个变换,这个变换并不是自己想要的)。

bool CGAffineTransformEqualToTransform(CGAffineTransform t1,
  CGAffineTransform t2)
说明:对比t1和t2变换是否相等。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值