Изменение значения CGrect для пользовательской системы координат - PullRequest
7 голосов
/ 30 марта 2011

у меня есть CGRect; Могу ли я перенести его координаты в пользовательскую систему координат, то есть в нижний левый угол сверху вместо верхнего левого угла вниз. Есть ли какой-либо предопределенный метод для этого или мне нужно рассчитать его вручную? Заранее спасибо.

1 Ответ

13 голосов
/ 30 марта 2011

Чтобы преобразовать прямоугольник из системы координат, источник которой находится в левом нижнем углу (давайте просто назовем его традиционной системой координат, чтобы дать ему имя), в систему, где источник находится в верхнем левом углу (система координат 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

...