CoreText (番外篇)Quartz2D-仿射变换

Quartz 提供3中变换:移动,旋转,缩放

Quartz转换实现的原理是Quartz把绘图分成两个部分,

  • 用户空间,即和设备无关。
  • 设备空间

用户空间和设备空间中间存在一个转换矩阵 : CTM

CTM 实际是个3维矩阵

CTM

通过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转换公式后的运算结果

参考:


矩阵及其运算

iOS Developer Libray - Transforms

CoreGraphics QuartzCore CGContextTranslateCTM 用法

你可能感兴趣的:(CoreText (番外篇)Quartz2D-仿射变换)