美文网首页
iOS在Context上绘制带角度旋转的文字

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

作者: 歌莫信息 | 来源:发表于2018-06-06 17:50 被阅读585次

    假设要在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上绘制带角度旋转的文字

          本文链接:https://www.haomeiwen.com/subject/nthisftx.html