Поворот Портрет Пейзаж с 2 XIB
-
21-09-2019 - |
Вопрос
у меня есть 2 графических интерфейса и 2 контроллера 1 называется landscapeguicontroller, а второй называется highguicontroller.
Теперь обычно я вызываю highguicontroller, и когда я поворачиваю свой iphone, он обнаруживает это, а затем показывает landscapeguicontroller:Код:
landscapeguicontroller *neu =[[landscapeguicontroller alloc] initWithNibName:nil bundle:nil];
[self presentModalViewController:neu animated:YES];
[self dismissModalViewControllerAnimated:YES];
Проблема в том, что затем анимация выталкивает новое окно с внешней стороны iphone вверх в окно.
В Landscapeguicontroller я добавил к следующим строкам:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
когда я хочу вернуться к highguicontroller, я вызываю:
[self dismissModalViewControllerAnimated:YES];
все это работает, но только во второй анимации я вижу правильную "анимацию вращения".У вас есть какие-нибудь предложения?
Итак, краткое описание Проблемы:в 1.анимация от high к landscape, пейзаж выталкивается в окно НО во 2.анимация от альбомной до высокой, вращение выглядит как реальное вращение...
я хочу, чтобы анимация 1. выглядела как анимация 2.Анимация
с наилучшими пожеланиями Плоценедер
Решение
Чтобы избежать "Проблема в том, что затем анимация перемещает новое окно с внешней стороны iphone в окно". попробуйте установить для свойства modalTransitionStyle контроллера просмотра одно из следующих значений, независимо от того, что вы предпочитаете:перечисление typedef { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve разрешить, } UIModalTransitionStyle;
Кроме того, если вы хотите избежать анимированного поворота, вы можете установить свой shouldRotate...способ запретить другие ориентации, но затем настроить получение уведомлений, когда устройство физически меняет ориентацию, и представить ваш модальный viewcontroller в соответствующей для него ориентации.Смотрите примерный код Apple "AlternateViews" для примера этого.
Уведомления отражают физическую ориентацию устройства, и вы можете получать их независимо от того, разрешено изменение интерфейса или нет.(Вы можете посмотреть на свойство statusBarOrientation UIApplications, чтобы увидеть, в какой ориентации находится пользовательский интерфейс).
Другие советы
Похоже, вы хотите, чтобы последовательность была такой:
- Физический поворот устройства из книжной ориентации в альбомную
- Анимировать портретный вид (
highguicontroller
) к ландшафту - Переключите альбомный вид (
landscapeguicontroller
) вверх от нового "низа" экрана
Если это верно, вам нужно будет иметь что-то вроде следующего в вашем highguicontroller
реализация:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown;
}
Это позаботится о шаге 2 (он повернет портретный вид в альбомную ориентацию в любом направлении).
Тогда вы захотите что-то вроде этого:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if(fromInterfaceOrientation == UIInterfaceOrientationPortrait) {
[self presentModalViewController:landscapeguicontroller animated:YES];
}
else {
[self dismissModalViewControllerAnimated:YES];
}
}
Это должно отображать альбомный вид после завершения анимации поворота, а затем отклонять его после того, как устройство будет повернуто обратно в портретное положение.
Надеюсь, это поможет!