Вы говорите push, поэтому я предполагаю, что оба ViewControllers находятся в NavigationController.Если это так, я должен разочаровать вас, то, что вы хотите, не возможно.Ваши обратные вызовы ротации работают правильно, они реагируют на ротацию, вы не можете форсировать ее.То, что происходит, это правильное поведение.
Лучшее решение - не дать пользователю вернуться назад, когда вы находитесь в ориентации, которую предыдущий ViewController не поддерживает, например, скрыть кнопку возврата.
А пока ясделал свой собственный NavigationController (не наследует от UIViewController, но он может делать то же самое), и я попытался реализовать то, что вы пытаетесь сделать.Перед нажатием или выталкиванием, если представление ViewController, которое должно было быть показано, не поддерживало текущую ориентацию, я преобразовал представление этого ViewController на 90 ° и принудительно установил ориентацию строки состояния в поддерживаемую ориентацию нового ViewController.Как только толчок или щелчок закончится, я сделаю небольшой трюк, чтобы вызвать вращение устройства.Если вы удалите представление rootViewController из окна и повторно добавите его, цепочка респондента будет вынуждена пройти через все обратные вызовы вращения.Когда это произошло, я проверил, было ли преобразовано представление ViewController, и сбросил это преобразование.
В основном это сработало.Но это был грязный код, и он противоречит текущей политике Apple, согласно которой rootViewController должен отвечать за обработку ориентации.Также в iOS6 форсирование ориентации строки состояния гарантированно работает.Так что я бы действительно советовал не делать этого, я тоже удалил это из моего собственного NavigationController.