矩阵的旋转、缩放、平移操作一定是在添加路径到上下文中之前进行的否则是无效的。简单来说就是如下的操作
//1、获取上下文
CGContextRef ctx=UIGraphicsGetCurrentContext();
//进行矩阵的旋转操作
//CGContextRotateCTM(ctx, M_PI_4);
//缩放操作,就是x缩短为0.5,y缩短为0.5
//CGContextScaleCTM(ctx, 0.5, 0.5);
//平移操作,原点会向下和右偏移
CGContextTranslateCTM(ctx, 20, 20);
//先画一个圆
CGContextAddArc(ctx, 150,150 , 100, 0, 2*M_PI, 1);
CGContextMoveToPoint(ctx, 0, 0);
CGContextAddLineToPoint(ctx, 300, 300);
//设置下线宽
CGContextSetLineWidth(ctx, 10);
//渲染
CGContextStrokePath(ctx);
其实就是先把上下文旋转,缩放,平移了,然后在取绘制的所有的图形就是在旋转,缩放,平移之后的上下文中进行了。
关于平移CGContextTranslateCTM的效果如下图所示,我这里所取的x和y的偏移取的是-30,先看原来的效果
设置了下面这行的代码
CGContextTranslateCTM(context, -30, -30);
得到的是这样的效果
为了方便观察旋转的操作,我们这里把图像变成充满整个黑色框框大小,现在的图像
然后我们再进行设置旋转
CGContextRotateCTM(context, M_PI_4);
这里需要注意的是在Quartz坐标下正数为逆时针旋转,负数为顺时针旋转。而在UIKit坐标下正数为顺时针旋转,负数为逆时针旋转。
所以效果如下所示
下一个就是缩小x和y都缩小0.5
CGContextScaleCTM(context, 0.5, 0.5);
其实从这里可以看出默认情况下context其实都是基于左上角的原点进行设置的。