这个是CoreGraphics框架中的CGAffineTransform类,可用于设定UIView的transform属性。控制视图的缩放、旋转和平移操作。另称仿射变换矩阵。

Quartz转换实现原理:Quartz把绘图分为两个部分,用户空间(和设备无关),设备空间。用户空间和设备空间中存在一个转换矩阵CTM。我们可以通过直接修改CTM来实现效果,也可以通过创建Affine Transforms,然后连接CTM实现同样的效果。好处是可以重用Affine Transforms。

void CGContextContactCTM (CGContextRef c, CGAffineTransform transform);

1 CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty) 平移:设置平移量

CGContextTranslateCTM (myContext, 100, 50);//直接通过修改当前CTM实现

2 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy) 缩放:设置缩放比例,仅通过设置缩放比例就可以实现视图扑面而来和锁紧屏幕的效果。

CGContextScaleCTM (myContext, .5, .75);//直接通过修改当前CTM实现

缩放,x*0.5 y*0.75

3 CGAffineTransformMakeRotation(CGFloat angle) 旋转:设置旋转角度

CGContextRotateCTM (myContext, radians(–45.));//直接通过修改当前CTM实现

以上三个都是针对视图的原定最初位置的中心点为起始参照进行相应操作的,在操作结束之后可对设置进行还原。

view.transform = CGAffineTransformIdentity;//线性代数里面讲的矩阵变换,这个是恒等变换,当改变过一个view.transform属性或者view.layer.transform的时候需要恢复默认状态的话,记得先把他们重置可以使用。或者view.layer.tranform = CATransform3DIdentity.

注意:如果一直不断改变一个view.transform的属性,而每次改变之前没有重置的话,会发现后来的改变和你想要的发生变化了,不是你真正想要的结果。

另外还可以通过CGAffineTransformTranslate等方法对现有的transform进行进一步处理。

使用:

#import "CoreGraphics.h"

CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);

[XXX setTransform:rotation];

//同CGAffineTransformRotate(transform, M_PI_2);

#define M_E         2.71828182845904523536028747135266250   e


#define M_LOG2E     1.44269504088896340735992468100189214   log 2e


#define M_LOG10E    0.434294481903251827651128918916605082  log 10e


#define M_LN2       0.693147180559945309417232121458176568  log e2


#define M_LN10      2.30258509299404568401799145468436421   log e10


#define M_PI        3.14159265358979323846264338327950288   pi


#define M_PI_2      1.57079632679489661923132169163975144   pi/2


#define M_PI_4      0.785398163397448309615660845819875721  pi/4


#define M_1_PI      0.318309886183790671537767526745028724  1/pi


#define M_2_PI      0.636619772367581343075535053490057448  2/pi


#define M_2_SQRTPI  1.12837916709551257389615890312154517   2/sqrt(pi)


#define M_SQRT2     1.41421356237309504880168872420969808   sqrt(2)


#define M_SQRT1_2   0.707106781186547524400844362104849039  1/sqrt(2)

 

4 反转效果 CGAffineTransformInvert(CGAffineTransform t);

5 只对局部产生效果 CGRectApplyAffineTransform(CGRect rect,CGAffineTransform t);

6 判断两个仿射变换是否相等 CGAffineTransformEqualToTransform(CGAffineTransform t1,CGAffineTransform t2);

7 获取仿射变换 CGContextGetUserSpaceToDeviceSpaceTransform(CGContextRef c);

下面的函数只起到查看的效果,比如看一下这个用户空间的点,转换到设备空间去坐标是多少
CGPoint CGContextConvertPointToDeviceSpace (
   CGContextRef c,
   CGPoint point
);
 
CGPoint CGContextConvertPointToUserSpace (
   CGContextRef c,
   CGPoint point
);
 
CGSize CGContextConvertSizeToDeviceSpace (
   CGContextRef c,
   CGSize size
);
 
CGSize CGContextConvertSizeToUserSpace (
   CGContextRef c,
   CGSize size
);
 
CGRect CGContextConvertRectToDeviceSpace (
   CGContextRef c,
   CGRect rect
);
 
CGRect CGContextConvertRectToUserSpace (
   CGContextRef c,
   CGRect rect
);
 原文 http://donbe.blog.163.com/blog/static/138048021201061054243442/

CTM真正的数学行为:

可以用函数判断这个矩阵是不是一个 identiy matrix

bool CGAffineTransformIdentity(CGAffineTransform t);

CGAffineTransform的更多相关文章

  1. CGAffineTransform方法汇总

    CGAffineTransform是二维的仿射变换,可以进行位移,旋转,缩放,CGAffineTransform实际上是一个矩阵. CGAffineTransform { CGFloat a, b, ...

  2. iOS方法类:CGAffineTransform的使用大概

    CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0. ...

  3. CGAffineTransform与CATransform3D

    CGAffineTransform 1.CG的前缀告诉我们,CGAffineTransform类型属于Core Graphics框架,Core Graphics实际上是一个严格意义上的2D绘图API, ...

  4. iOS基础CGAffineTransform的简单使用

    CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0. ...

  5. CGAffineTransform相关函数

    CoreGraphics.h CGAffineTransform rotation = CGAffineTransformMakeRotation(M_PI_2);
[xxx setTransform ...

  6. CoreGraphics 之CGAffineTransform仿射变换(3)

    CoreGraphics 之CGAffineTransform仿射变换(3)   CoreGraphics 的 仿射变换 可以用于 平移.旋转.缩放变换路径 或者图形上下文. (1)平移变换将路径或图 ...

  7. iOS方法类:CGAffineTransform的使用

    CoreGraphics框架中的CGAffineTransform类可用于设定UIView的transform属性,控制视图的缩放.旋转和平移操作: 另称放射变换矩阵,可参照线性代数的矩阵实现方式0. ...

  8. CGAffineTransform 放射变换解析 即矩阵变换

    转载自;http://www.cocoachina.com/bbs/3g/read.php?tid=151136 矩阵乘法A B相乘要A的列数等于B的行数才有定义,结果是一个 A行B列的矩阵C,C的每 ...

  9. CGAffineTransform的使用

    typedef struct CGAffineTransform CGAffineTransform; struct CGAffineTransform { CGFloat a, b, c, d; C ...

随机推荐

  1. python学习之路 第五天

    1.装饰器: #!/usr/bin/env python3 user_status = False #用户登录了就把这个改成True def login(auth_type): #把要执行的模块从这里 ...

  2. react-redux原理分析

    写在前面 之前写了一篇分析Redux中Store实现的文章(详见:Redux原理(一):Store实现分析),突然意识到,其实React与Redux并没有什么直接的联系.Redux作为一个通用模块,主 ...

  3. 学习vue.js 第一天

    最近听到很多人都在用Vue.js ,我也想凑凑热闹,来个入门 啥的 ,要不以后人家说,啥都不知道,多low 看到官网 是这样介绍Vue.js Vue.js(读音 /vjuː/, 类似于 view) 是 ...

  4. jsp编码过程

    pageEncoding是jsp文件本身的编码 contentType的charset是指浏览器到服务器发送时使用的编码:以及服务器返回到浏览器使用的编码 JSP要经过三次的“编码” 第一阶段会用JS ...

  5. js 闭包

    this.color = "blue"; (function(_this) { setInterval(function() { if (_this.color !== " ...

  6. 查看 SHA1

    keytool -v -list -keystore C:\Users\tianyingzhong\.android\debug.keystore 输入密钥库口令: android android

  7. coreseek 安装及使用方法详解

    coreseek 安装及使用 一般站点都需要搜索功能,如果是php+mysql站点,建议选择coreseek,如果是java站点建议使用lucene,coreseek 是一款很好的中文全文检索/搜索软 ...

  8. Windows服务已经标记为删除

    一般卸载后..刷新一下服务列表就会消失不见..但是也会偶尔碰上一些钉子户.. 这时候其实重启一下机器就可以解决这个问题..会被回收掉..但是在服务器上..可不是随便都能重启的.. 这就到祭出杀手锏的时 ...

  9. windows7下Wamp安装php扩展imagick(转)

    ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等 ...

  10. 【Redis安装学习】

    1.Redis 中文官网地址:http://www.redis.net.cn/download/ 这里只是简单的安装了下.具体的官网有详细的介绍和安装:跳转 如何安装 下载,解压,编译: $ wget ...