这个是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. linux 常见命令

    redhat 1.获取apt软件列表 sudo apt-cache search all 2.添加用户并创建目录 sudo useradd -m username -s /sbin/bash 3.vs ...

  2. DOM基础知识

    DOM BOMDOM 文档对象模型 document.BOM 浏览器界面上所有内容 broder object.没有括号属性.()方法 DOM写法 document.作用 做特效 找到 摘出元素 增删 ...

  3. Android基础总结(四)

    网络图片查看器 确定图片的网址 发送http请求 URL url = new URL(address); //获取连接对象,并没有建立连接 HttpURLConnection conn = (Http ...

  4. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  5. 如何防止应用因获取IDFA被AppStore拒绝

    由于Appstore禁止不使用广告而采集IDFA的app上架,友盟提供IDFA版和不含IDFA版两个SDK,两个SDK在数据上并没有差异,采集IDFA是为了防止今后因为苹果可能禁止目前使用的openu ...

  6. Greenplum记录(二):估计存储容量

    存储空间除了用来存储用户数据,还需要:landing backup files and data load files 空系统的存储空间:disk_size * number_of_disks 除去系 ...

  7. Python Day17

    jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在 ...

  8. This month Calendar

    package fourth;import java.text.DateFormatSymbols;import java.util.*;public class CalendarTest { pub ...

  9. css3 圆角

    -moz-border-radius: 15px; /* Gecko browsers */ -webkit-border-radius: 15px; /* Webkit browsers */ bo ...

  10. mac机快捷键操作

    1. 屏幕最大和缩小:command+ctrl +f 2.切换应用:comand+tab, 3.大小写转换:comand + 空格 4.切换到下/上一个标签页:同时按 ⌘-Option 和向右/左箭头 ...