iOS: изменение размера и позиционирования нового представления, добавленного в приложение, запущенное в альбомной ориентации - PullRequest
0 голосов
/ 31 января 2012

Я думаю, что это, вероятно, спросили, но после прочтения я не уверен, что нашел ответ.

Когда приложение поворачивается в горизонтальное положение, я добавляю новый вид в основной вид. Новое представление создается и добавляется в код, подобный следующему:

UIView * newView = ....
[rootView addSubview:newView];

Но поскольку симулятор поворачивается в горизонтальную плоскость, когда я добавляю новый вид, я получаю следующее:

+------------------------------------------------------+
+  +---------------------------------------------+     +
+  |                          |                  |     +
+  |                          |                  |     +
+  |      newView             |   rootView       |     +
+  |      (Landscape          |   (Landscape)    |     +
+  |   but portrait size)     |                  |  () +
+  |                          |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  +---------------------------------------------+     +
+------------------------------------------------------+

Итак, я добавил newView.bounds = rootView.bounds; newView.center = rootView.center;, думая, что это поместит newView прямо поверх rootView, но вместо этого я получил это:

+------------------------------------------------------+
+  +---------------------------------------------+     +
+  |                                             |     +
+  |                                             |     +
+  |--------------------------+   rootView       |     +
+  |                          |   (Landscape)    |     +
+  |         newView          |                  |  () +
+  |  (Landscape size,        |                  |     +
+  |   but offset)            |                  |     +
+  |                          |                  |     +
+  |                          |                  |     +
+  +---------------------------------------------+     +
+------------------------------------------------------+

Я пытаюсь выяснить, почему они отличаются, хотя я установил, что границы и центры одинаковы.

Сбрасывая взгляды, я получаю это:

 rootView; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x98870a0>>
 newView ; frame = (-128 128; 1024 768); autoresize = W+H; layer = <CALayer: 0x6e470a0>>

Таким образом, кажется, что rootView по-прежнему 768w x 1024h, только что повернутый преобразованием, и после установки границ и центра новый вид будет 1024w x 768h и смещен на 128 точек.

1 Ответ

0 голосов
/ 31 января 2012

После еще одной игры, я придумал это:

 // Position the new view offscreen.
CGFloat width = rootView.bounds.size.width;
CGFloat height = rootView.bounds.size.height;
newView.frame = CGRectMake(0, height, width, height);
[rootView addSubview:newView];

 // Animate to the center of the view.
[UIView animateWithDuration:1.0 animations:^{
    newView.frame = CGRectMake(0,0, width, height);
 }];

Это работает, мне просто интересно, есть ли лучшее решение.

...