Quartz 提供3中变换:移动,旋转,缩放
Quartz转换实现的原理是Quartz把绘图分成两个部分,
- 用户空间,即和设备无关。
- 设备空间
用户空间和设备空间中间存在一个转换矩阵 : CTM
CTM 实际是个3维矩阵
通过CGContextGetCTM(CGContextRef c)可以获取context的CTM
因为我们使用的是Retina屏幕所以 a和d是2
矩阵运算
矩阵加法
PS:只用同型矩阵执行加法才有意义
{x,y}+{a,b} = {x+a,y+b}
矩阵乘法
PS:只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。
假设A为mxn型矩阵
假设B为n x l型矩阵
A可以左乘B(PS:距阵A的列数等与矩阵B的行数)得到的时一个m x l的矩阵C
即:AB=C
旋转
仿射变换
转换API
移动
CG_EXTERN void CGContextTranslateCTM(CGContextRef c, CGFloat tx, CGFloat ty)
缩放
CG_EXTERN void CGContextScaleCTM(CGContextRef c, CGFloat sx, CGFloat sy)
旋转
CG_EXTERN void CGContextRotateCTM(CGContextRef c, CGFloat angle)
数学行为
从用户坐标到设备坐标的转换公式
(x,y)是用户坐标 (x’, y’)是设备坐标
经过Quartz2D转换公式后的运算结果
平移变换的数学行为
转换矩阵(CTM)
经过Quartz2D转换公式后的运算结果
放缩变换
转换矩阵(CTM)
经过Quartz2D转换公式后的运算结果
旋转变换
转换矩阵(CTM)
经过Quartz2D转换公式后的运算结果
参考: