8

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

4

1 回答 1

14

要将矩形从原点在左下角的坐标系(我们称之为传统坐标系来给它命名)转换为原点在左上角的系统(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)

希望这张图能看得更清楚 希望这张图能看得更清楚

于 2011-03-30T07:27:28.437 回答