将CGrect值更改为用户坐标系

时间:2011-03-30 06:10:48

标签: objective-c cocoa-touch ios cgrect

我有CGRect;我可以将其坐标转移到用户坐标系中,即左下角到顶部而不是左上角到底部。是否有任何预定义的方法或我需要手动计算?在此先感谢。

1 个答案:

答案 0 :(得分:13)

要从原点位于左下方的坐标系中转换矩形(我们只需将其称为传统坐标系,将其命名)转换为原点位于左上角(iPhone坐标系)的系统知道CGRect所在视图的大小,因为视图是矩形的参考。

例如,假设您的视图尺寸为200 x 300,而CGRect的视图为CGRectMake(10, 20, 30, 40)CGRect的大小将保持不变。所有改变的都是原点 - 实际上,只有y坐标会改变而不是x坐标,因为传统和iPhone坐标系统都从左侧开始(一个在左下角;另一个在左上角)。

所以我们会有CGRectMake(10, y, 30, 40)之类的东西。

  - (CGRect)rectangle:(CGRect)oldRect fromTraditionalToiPhoneCoordinatesWithReferenceViewOfSize:(CGSize)aSize
     {
      CGFloat oldY = oldRect.origin.y;  // This is the old y measured from the bottom left. 
      CGFloat newY = aSize.height - oldY - oldRect.size.height;

      CGRect newRect = oldRect;
      newRect.origin.y = newY;

      return newRect;
     }

从iPhone(左上角)坐标系统测量的新矩形为:CGRectMake(10, 300 - 20 - 40, 30, 40) = CGRectMake(10, 240, 30, 40)

希望这张图片更加清晰 Hopefully this image makes it clearer