Приложение для iPhone работает в альбомном режиме, но границы просмотра по-прежнему остаются портретными
Вопрос
Что на самом деле происходит за кадром, когда вы устанавливаете ориентацию телефона в альбомный режим?Когда я проследил границы главного экрана и любого вложенного представления, ширина и высота по-прежнему равны 320x480, а не 480x320.
Есть идеи, почему?
Решение 6
Обнаружена проблема: причина, по которой границы остаются неизменными после поворота, заключается в том, что единственное, что затрагивается после поворота, - это свойство преобразования представления.
Быстрая трассировка преобразования представления дает мне следующее:
2012-01-31 12:19:02.114 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortrait
2012-01-31 12:19:02.116 TestScollviewRotation[9834:207] 0.000000 -1.000000 1.000000 0.000000
2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationPortraitUpsideDown
2012-01-31 12:21:41.898 TestScollviewRotation[9834:207] 0.000000 1.000000 -1.000000 0.000000
2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeRight
2012-01-31 12:21:58.780 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000
2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] orientation: UIDeviceOrientationLandscapeLeft
2012-01-31 12:19:03.181 TestScollviewRotation[9834:207] 1.000000 0.000000 -0.000000 1.000000
Другие советы
Проверяете ли вы свойство bounds или свойство frame? Некоторые элементы управления, особенно UIViews, которые заполняют экран, по-видимому, поддерживают один и тот же кадр в любой ориентации; Я думаю, что AppKit устанавливает их свойство transform для поворота их содержимого.
Вероятно, вы обнаружите, что свойство bounds имеет значение, которое вы ожидаете большую часть времени, а свойство frame - нет.
Это большая тема, но я добавлю то, что составляет 0,02;комментарии ограничены изменениями между книжной и альбомной ориентацией;то есть, не такие вещи, как перевернутый, лицом вверх, лицевой стороной вниз и неизвестный.
Если вид не отслеживает изменения ориентации, то рамка и границы останутся неизменными независимо от ориентации.
Если представление зарегистрировалось для прослушивания изменений ориентации, то границы могут изменение;т.е. в альбомной ориентации весь кадр экрана равен <320,480> в то время как границы равны <480,320>.Это предполагает:
a.вы либо используете обратный вызов shouldAutorotateToInterfaceOrientation с соответствующими возвращаемыми значениями YES, либо
b.явная регистрация в центре уведомлений для прослушивания UIDeviceOrientationDidChangeNotification.
Подход 2a будет иметь значение true только для представлений, принадлежащих корневому контроллеру представления окна приложения;то есть контроллер представления, чье представление было добавлено первым.Подход 2b может быть использован в сочетании с аффинными преобразованиями и руководство пользователя границы изменяются, чтобы получить правильную ориентацию для видов, не регулируемых авторотированием.
Я обнаружил, что если вы не используете UINavigationController, у вас могут возникнуть проблемы с тем, что вашему представлению не дают правильное представление и границы кадра.
Я непосредственно добавлял представления в окно UIWindow, и у меня возникла именно эта проблема. Но когда я поместил UINavigationController между UIWindow и UIViews, проблема исчезла.
Надеюсь, это поможет
Да, рамка и границы остаются прежними, вы должны проверить свойство interfaceOrientation в ViewController и соответственно обработать ширину и высоту, если ваш макет зависит именно от них.
В настоящий момент у меня та же проблема с приложением для iPad.
Я " решен " это путем запроса представлений interfaceOrientation
, и если это UIDeviceOrientationPortrait
или UIDeviceOrientationPortraitUpsideDown
, тогда я вручную устанавливаю рамку моего подслоя в представлении (которое является CAGradientLayer
).