-У меня есть UIView.
-Этот UIView имеет UIButton, при нажатии которого появляется UIAlertView.
-В пределах этого UIAlertView у меня есть еще один UIButton, который при нажатии вызывает метод buttonClicked:
-Внутри этого метода buttonClicked:, Я вызываю presentPopoverFromRect с пользовательским представлением внутри. (hourKeyboard - это пользовательский вид)
-(void)buttonClicked:(id)sender
{
if(self.hourKeyboard==nil)
{
self.hourKeyboard = [[HourKeyboardViewController alloc] init];
self.hourKeyboardPopover = [[UIPopoverController alloc] initWithContentViewController:self.hourKeyboard];
}
[self.hourKeyboardPopover presentPopoverFromRect:[sender bounds] inView:sender permittedArrowDirections:UIPopoverArrowDirectionLeft animated:YES];
}
В обычном портретном режиме это работает отлично. Всплывающее окно появляется справа от кнопки со стрелкой, правильно указывающей влево на кнопку.
Возникают 2 проблемы:
1) Пока это всплывающее окно видно, при повороте экрана всплывающее окно поворачивается немного неправильно (оно не меняет свою собственную позицию x и y)
2) Если всплывающее окно не показывают. Если вы повернете экран, а затем вызовете «buttonClicked», всплывающее окно появится, однако оно будет отображаться сбоку над кнопкой со стрелкой, указывающей «вниз» на кнопку (технически слева по отношению к боковому виду всплывающего окна). Если вы отклоните его, повернете экран, а затем вызовете «buttonClicked», всплывающее окно теперь отображается вверх ногами, а кнопка указывает «вправо» на кнопку (опять же, технически влево по отношению к боковому виду всплывающего окна)! Повторите, чтобы снова сделать это боком, а затем снова правой стороной вверх.
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Мое мышление:
1) Я считаю, что могу просто изменить положение x и y, однако я также читал, что вы должны отклонить всплывающее окно и представить его снова при вращении. Я посмотрю, смогу ли я заставить работать первый, однако меня больше беспокоит вторая проблема.
2) Я понятия не имею, как решить эту проблему с вращением. Кажется, что когда вы поворачиваетесь в ландшафт, всплывающее окно не видно. И затем вы вызываете presentPopoverFromRect, всплывающее окно создается с iPad, который по ошибке думает, что он все еще находится в портретной ориентации. Это поведение, которое он дает, однако я не уверен, как сделать так, чтобы iPad не совершал эту ошибку.
-=-=-=-=-=-=-=-=-=
Еще раз спасибо за любую помощь, которую вы можете предоставить!
-=-=-
Небольшое обновление:
1) Было легко убрать всплывающее окно из основного вида при повороте. И это, кажется, общий способ, которым все решают эту проблему.
2) Попытка различных вещей, таких как изменение кадра, использование CGAffineTransformMakeRotation и других... но пока безуспешно
-=-=-
Другое обновление:
2) После долгих испытаний кажется, что это прямая проблема с UIAlertView. Если я помещу представление в UIAlertView (в настоящее время), AlertView не сообщает всплывающему меню, что экран повернут... тем самым создавая проблему
Похоже, единственный способ исправить это — полностью удалить UIAlertView. Вместо того, чтобы показывать UIAlertView, я отключу различные фоновые представления вручную (как это делал Alert View), а затем покажу пользовательский UIView, который чертовски похож на AlertView. Оттуда я смогу показать всплывающее окно без каких-либо проблем. Я дам знать, как это получается.
-=-=-=-=-=-=-=-
Окончательное решение:
В итоге я просто создал свое собственное представление, и это представление имитировало UIAlertView. Затем, когда я создал всплывающее окно, я поместил его в корневой контроллер представления. Работало НАМНОГО лучше, но требовало больше работы, так как мне пришлось вручную создавать собственное представление вместо готового UIAlertView. В любом случае, по-видимому, UIAlertView не может сообщить подвиду UIPopoverover, в каком повороте он находится.