#objective-c #ios #rotation
#objective-c #iOS #поворот
Вопрос:
У меня есть пара подклассов UIViewController. Тот, который отображает сетку, а другой, который по сути является «подробным представлением» для плитки в сетке. Пользователь нажимает на плитку, и подробное представление расширяется из сетки, заполняя экран.
Мне удалось заставить представления анимироваться должным образом, и я могу идеально отображать содержимое каждого представления. Моя проблема возникает при повороте устройства. Я отобразил детальный вид в качестве подвида gridview, и поэтому, когда я поворачиваю устройство, контроллер просмотра сетки получает вызовы поворота, а не детальный вид.
Поскольку это пользовательская анимация, я не мог использовать стандартные методы pop и push view controller. Есть ли метод, который я должен вызвать, чтобы заставить этот контроллер представления отвечать за обработку вращения, пока он не будет отклонен?
Спасибо
Ответ №1:
Если я правильно понимаю, вы поворачиваете свой контроллер просмотра сетки, и он реагирует, но контроллер представления «детальный просмотр» изменяется некорректно?
Если это так, есть два возможных решения, о которых я могу подумать (и в настоящее время использую сам). Одним из решений было бы зарегистрировать «подробный просмотр» для уведомления. Всякий раз, когда контроллер просмотра сетки поворачивается, отправляйте уведомление, и «подробный просмотр» должен реагировать так, как вы этого хотите.
Другое решение — это просто проверка при загрузке «подробного представления».
if (self.view.bounds.size.height < self.view.bounds.size.width) {
// apply the code you wish to size it for landscape mode;
}
Это, конечно, сработало бы только в том случае, если «детальный просмотр» в данный момент не виден при повороте экрана, поэтому отправка уведомления может быть лучшим выбором для охвата всех возможностей.
Ответ №2:
Вы могли бы настроить пользовательский делегат в контроллере просмотра сетки и зарегистрировать контроллер просмотра деталей в качестве этого делегата после его настройки. Затем в контроллере представления сетки вы реализуете willRotateToInterfaceOrientation:duration:
и didRotateFromInterfaceOrientation:
, которые сначала вызывают соответствующие методы в делегате (контроллере представления деталей), а затем в super
.