iPhone только для ландшафта - PullRequest
6 голосов
/ 10 апреля 2009

Используя информацию здесь: Приложение-шаблон для iPhone только для ландшафта Я могу запускать, использовать и поддерживать свой вид только в виде ландшафта. Тем не менее, я смущен по поводу оси.

Абсолютная ось ведет себя как ожидалось, означая (0,0) - верхний левый угол, (240,0) - верхний центр, (0,320) - нижний левый угол и т. Д. Однако, когда я пытаюсь выполнить вычисления Относительно вида, на котором я рисую, я нахожу, что x, y ориентированы так, как если бы верхний левый портрет был источником. Итак, чтобы нарисовать что-то в центральной точке моего контроллера вида, мне нужно сделать:

CGPoint center = CGPointMake(self.view.center.y, self.view.center.x);

Я предполагаю, что это из-за того факта, что UIView, на который ссылается мой контроллер self.view, задает свои значения относительно рамки, то есть окно, в котором его начало оси находится слева вверху в портретном режиме.

Есть ли какой-то простой способ объяснить это, что мне не хватает?

Документация предполагает, что свойство transform - это именно то, что я ищу, однако здесь я испытываю дальнейшую путаницу. Есть 3 основных свойства:

  • рама
  • оценка
  • центр

Если я сделаю это в viewDidLoad:

// calculate new center point
CGFloat x = self.view.bounds.size.width / 2.0;
CGFloat y = self.view.bounds.size.height / 2.0;
CGPoint center = CGPointMake(y, x);

// set the new center point
self.view.center = center;

// Rotate the view 90 degrees counter clockwise around the new center point.
CGAffineTransform transform = self.view.transform;
transform = CGAffineTransformRotate(transform, -(M_PI / 2.0));
self.view.transform = transform;

Теперь, согласно справочным документам, если преобразование не установлено в качестве идентификатора, преобразование self.view.frame не определено. Поэтому я должен работать с границами и центром.

self.view.center теперь верен, потому что я установил его так, как я хотел. self.view.bounds отображается без изменений. Похоже, что self.view.frame - это именно то, что я хочу, но, как отмечалось выше, ссылка утверждает, что она недействительна.

Поэтому, хотя я могу получить, как мне кажется, правильные цифры, я боюсь, что упускаю из виду нечто критическое, что позже станет неприятным.

Спасибо.

1 Ответ

2 голосов
/ 18 апреля 2009

В Quartz 2D система координат имеет свое начало (0,0) в левом нижнем углу графика, а не в верхнем левом углу. Может быть, это то, что вам не хватает.

См .: http://developer.apple.com/documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_overview/dq_overview.html#//apple_ref/doc/uid/TP30001066-CH202-CJBBAEEC

...