cgcontext旋转矩形

Dom*_*lin 3 core-graphics rotation rect cgcontext ios

伙计们!我需要将一些图像绘制到CGContext.这是相关的代码:

CGContextSaveGState(UIGraphicsGetCurrentContext());

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGRect rect = r;

CGContextRotateCTM(ctx, DEGREES_TO_RADIANS(350));
[image drawInRect:r];


CGContextRestoreGState(UIGraphicsGetCurrentContext());
Run Code Online (Sandbox Code Playgroud)

实际上,矩形是旋转并显示在一个不是我的目的的区域.我只想旋转图像并显示在同一位置.有任何想法吗 ?????

Pet*_*sey 16

旋转是关于上下文的起源,这与矩形相对的点相同.如果你想象一张背景中的方格纸,你可以更清楚地看到发生了什么:

旋转的上下文与背景中的图纸网格和前景中的矩形

该行是窗口/视图/图层/上下文的"底部"(y = 0).当然,如果需要,您可以在底部下方绘图,如果您的上下文以正确的方式进行转换,您甚至可以看到它.

无论如何,我假设你要做的是将矩形旋转到相对于未旋转的世界,而不是旋转世界及其中的一切.

旋转任何东西的唯一方法是旋转世界,这就是你需要做的事情:

  1. 保存图形状态.
  2. 将原点转换为要绘制矩形的点.(您可能希望转换为其中心点,而不是矩形的原点.)

    使用图纸背景翻译上下文,显示原点在矩形的中心

  3. 旋转上下文.

    用图形纸背景翻译和旋转上下文,显示轴现在像以前一样向上倾斜,但现在翻译的原点也像矩形那样移动了

  4. 绘制以原点为中心的矩形.换句话说,你的矩形的原点应该是其宽度的一半而负高度的一半(即(CGPoint){ width / -2.0, height / -2.0 }) - 不要使用之前的原点,因为你已经在翻译步骤中使用了它.

    绘制在其位置的矩形,删除了图纸背景和原点线

  5. 恢复gstate,以便将来的绘图不会旋转.