UIView поворачивается на 90 градусов при добавлении в альбомную ориентацию - PullRequest
1 голос
/ 14 августа 2011

Я работаю над кастомом UIPopoverController. Я не делаю подклассы, я пишу свой собственный с нуля как NSObject подкласс.

Работает довольно просто. Он добавляет полноэкранный UIView к UIWindow для перехвата касаний. Выше этого представления он добавляет (меньшее) представление поповера и размещает поповер в подходящей точке.

Я проверил его в iPad-приложении Portraid, и оно отлично работает. Хорошо позиционирует вид поповера.

Но теперь я столкнулся с проблемой. Мне нужно использовать его в приложении для iPad с альбомной ориентацией, но на моем контроллере popover по-прежнему отображается портрет, а не ландшафт. Он не автоматически (что, как я думал, должно быть).

Я знаю, что могу вручную поворачивать вид, устанавливая свойство transform. Но это усложнит ситуацию, потому что мне придется пересчитать правильное положение с учетом поворота на 90 градусов. Есть ли способ обойти это?

1 Ответ

1 голос
/ 14 августа 2011

Давайте посмотрим, что здесь делает UIPopoverController .Из документации:

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

Так что UIPopoverController не вращаетпредставление popover, которое оно поддерживает, как UIViewController .Это имеет смысл, учитывая, что UIPopoverController наследуется от NSObject и поэтому не наследует код UIViewController , который обрабатывает поворот.

Вы пытаетесь реализовать свой собственный UIPopoverController (я не буду спрашивать, почему!), И вы также наследуете от NSObject , поэтому вы не наследуете код, который будет вращать вашвзгляды для вас.Когда вы добавляете свой полноэкранный UIView в UIWindow , UIView существует в UIWindow координатном пространстве.При вращении устройства пространство координат UIWindow никогда не меняется .Для того чтобы ваш вид был повернут и перемещен в правильное пространство в ландшафтном режиме, вам придется сделать это вручную, применив CGSAffineTransform к свойству transform вашего UIView , возможно, вычисление матрицы вращения с использованием угла, полученного из ориентации интерфейса строки состояния (это то, что UIViewController сделает для вас!)

Ваш пользовательский UIPopoverController может управлять ротацией, но было бы проще получить это бесплатно, используя подкласс UIViewController , если это возможно.

...