这个是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. JavaScript面向对象的程序设计

    ECMAScript支持面对对象(oo)编程,但不使用类或接口.对象可以在代码执行过程中创建和增强,因此具有动态性而非严格定义的实体.在没有类的情况下,可以此采用下列模式创建对象. 工厂模式,使用简单 ...

  2. MVC其实很简单(Django框架)

    Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...

  3. html种种

    DIV+CSS如何让文字垂直居中?--https://zhidao.baidu.com/question/69214815.html

  4. Maven命令

    1. mvn help:describe 你是否因为记不清某个插件有哪些goal而痛苦过,你是否因为想不起某个goal有哪些参数而苦恼,那就试试这个命令吧,它会告诉你一切的. 参数: 1. -Dplu ...

  5. webstorm 常用快捷键

    webstorm应该是目前最强的js编辑器了,结合sublime text可以很效率的开发项目.今天整理了一些webstorm比较实用的快捷键: Ctrl+/ 或 Ctrl+Shift+/ 注释(// ...

  6. jQuery实现二级菜单

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  8. 深入理解JS的闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...

  9. UP Board 妄图启动ubilinux失败

    前言 原创文章,转载引用务必注明链接. 经历了上次的上电开机失败,我们终于发现需要手动为UP板安装系统,因为没有显示器的Headless模式时,使用Linux比较方便,另外熟悉Debian系的,所以选 ...

  10. jQuery知识点二 实现隔行变色

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...