Вопрос

у меня есть 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, чтобы увидеть, в какой ориентации находится пользовательский интерфейс).

Другие советы

Похоже, вы хотите, чтобы последовательность была такой:

  1. Физический поворот устройства из книжной ориентации в альбомную
  2. Анимировать портретный вид (highguicontroller) к ландшафту
  3. Переключите альбомный вид (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];
  }
}

Это должно отображать альбомный вид после завершения анимации поворота, а затем отклонять его после того, как устройство будет повернуто обратно в портретное положение.

Надеюсь, это поможет!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top