Iphone 上下文旋转

Iphone 上下文旋转,iphone,cocoa-touch,ipad,uikit,core-graphics,Iphone,Cocoa Touch,Ipad,Uikit,Core Graphics,我有一个100x100像素的图像,我想画一个围绕图像中心旋转的不同角度的图像。下面的代码可以工作,但会围绕坐标系的原始原点(左上角)而不是平移位置旋转。因此,图像不会围绕自身旋转,而是围绕屏幕的左上角旋转 以下代码是在一个空白应用程序的自定义视图中运行的,除此之外没有其他内容 - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextTranslateCTM

我有一个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)];
}

我试着用CGAffineTransform做同样的事情,但得到了同样的结果。

旋转总是围绕原点;你需要做的不是打败它,而是利用它

这里要记住的关键是,翻译会移动原点。因此,如果您希望将图像居中于屏幕中心并围绕该中心旋转图像,您需要做的是:

  • 将原点移动到屏幕的中心
  • 旋转所需的量。(想象这样做时x轴的末端移动;左端向下倾斜,右端向上倾斜。)
  • 将原点“向左”和“向下”(这两个方向都沿新的x轴和y轴)移动图像大小的一半
  • 想象一下,通过这些步骤,图像在iPad上的运动。或者,更好的办法是,记下便利贴,用手模拟:

  • 从iPad一角的便条开始
  • 移动便笺,使便笺的一角位于iPad的中心
  • 围绕该角旋转注释
  • 将音符“向左”(相对于自身)移动一半宽度,“向下”(相对于自身)移动一半高度

  • 您会注意到,注释最终会旋转并位于中心。

    不要硬编码屏幕尺寸。22年前Mac开发者发现了这一点,上周iPhone开发者又发现了这一点,屏幕的尺寸并不是永远不变的。帮自己一个大忙,问问屏幕有多大。准备好迎接iPad像素尺寸改变的那一天。我认为你所需要做的就是在旋转之前进行转换。第二个平移,移动到屏幕中心,将无法按预期工作,因为它将在旋转坐标中。屏幕尺寸仅硬编码,因为这是解决我的问题的简化示例。。。我的实际代码没有这样的假设:-)是的。。翻译,旋转,然后画图,除了图像将围绕其左上角旋转,而不是其中心。彼得,我在iPhone模拟器中做了一些测试,选择视网膜显示与正常显示不会改变硬编码矩形的屏幕位置。我做错什么了吗?