Я думаю, что это, вероятно, спросили, но после прочтения я не уверен, что нашел ответ.
Когда приложение поворачивается в горизонтальное положение, я добавляю новый вид в основной вид. Новое представление создается и добавляется в код, подобный следующему:
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 точек.