iOS在Context上绘制带角度旋转的文字

假设要在context的位置P点上绘制旋转了w 角度的文字text

由于context绘制text的接口没有参数可以设置文字的旋转角度,但有提供context旋转的方法,所以可以通过context旋转的方式实现。

1. context旋转:把context旋转w角度. CGContextConcatCTM(context, CGAffineTransformMakeRotation(w));

2.位置P变换:计算P点在新坐标系上的位置P' , 即把向量OP旋转 -w, 得到向量OP'. 

OP' = | cos(-w)  -sin(-w)|  * OP

           |sin(-w)  cos(-w) |

3.text绘制:在新位置P'上绘制文字text. [text drawAtPoint:pos' withAttributes:attributes]绘制文字

4. context恢复: 把context旋转 -w 角度恢复原坐标系 CGContextConcatCTM(context, CGAffineTransformMakeRotation(-w));



相关参考:

1. 通过context的操作实现图像或图形变换是一种比较常用的方法。例如UIImage中图片的旋转,镜像,裁切等效果是可以使用context实现的。AVFoundation中对视频进行旋转,镜像,裁切等效果也是可以使用context完成的

2. 如果不想进行“位置P变换”计算,这里也可以例context先平移到P点后,再进行旋转;这样会增加context的操作。具体操作如下:

     1)context原点平移到P点

    2)context旋转w

    3) 绘制文字

    4)context旋转 -w

   5) contex原点平移回原来的原点O

3. 也可以先用CGAffineTransform相关的变换函数,先计算出平移及旋转叠加的变换transform及其反变换transform'. 然后进行context操作及绘制文字

1)计算出平移及旋转的变换transform及其反变换transform'

2) 用transform对context进行变换

3)绘制文字

4) 用transform' 对context进行反变换

4. 对于三维的旋转效果可以使用 CALayer和CATransform3D。

你可能感兴趣的:(iOS在Context上绘制带角度旋转的文字)