CGContext旋转

kas*_*rjj 6 iphone cocoa-touch core-graphics uikit ipad

我有一个100x100像素的图像,我希望以围绕图像中心旋转的各种角度绘制.以下代码有效,但围绕坐标系的原始原点(左上角)而不是翻译位置旋转.因此,图像不会围绕自身旋转,而是围绕屏幕的左上角旋转.

以下代码在空白应用程序的自定义视图中运行,除此之外别无其他.

- (void)drawRect:(CGRect)rect {
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextTranslateCTM(context, -50, -50);
  CGContextRotateCTM (context, 0.3);
  CGContextTranslateCTM(context,768/2,1024/2);
  [image drawAtPoint:CGPointMake(0,0)];
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用CGAffineTransform做同样的事情,但得到了相同的结果.

Pet*_*sey 22

轮换总是关于起源; 你需要做的不是打败它,而是要利用它.

这里要记住的关键是翻译移动起源.因此,如果您想将图像置于屏幕中心并围绕该中心旋转图像,您需要做的是:

  1. 将原点移动到屏幕中央.
  2. 旋转所需的量.(想象一下,当你这样做时,x轴的末端会移动;左端向下倾斜,右端向上倾斜.)
  3. 将原点"向左"和"向下"(两者都沿着新的x和y轴)移动一半大小的图像.

想象一下,通过这些步骤,iPad上的图像运动.或者,更好的是,使用便利贴并手动模拟:

  1. 从iPad的一角开始说明.
  2. 移动音符,使音符的那个角落在iPad的中心.
  3. 旋转那个角落周围的音符.
  4. 将音符"左"(相对于自身)移动宽度的一半,将"向下"(相对于自身)移动一半高度.

您会注意到音符最终会旋转并位于中心.