假设要在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。