2009-10-17 3 views
3

У меня есть 2 GUI и 2 контроллера 1 называется landscapeguitontroller, а второй называется highguicontroller.Поворот Портрет Пейзаж с 2 XIB

Теперь обычно я называю 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. анимации от высоких до пейзажа, пейзаж выталкивается в окно НО в 2. анимации от пейзажа до высокого, вращение выглядит как реальный поворот ...

я хочу, чтобы 1.animation выглядеть как 2 анимации

наилучшими пожеланиями Ploetzeneder

ответ

3

Чтобы избежать «Проблема заключается в том, что анимация выталкивает новое окно из внешней стороны iphone в окно.», Попробуйте установить modalTransitionStyle свойство контроллера представления к одному из следующих действий, что бы вы предпочли: ЬурейеЕ перечисление { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, } UIModalTransitionStyle;

Кроме того, если вы хотите, чтобы избежать анимированное вращение, вы можете установить метод shouldRotate ..., чтобы запретить другие ориентации, но затем настроиться на получение уведомлений, когда устройство физически меняет ориентацию и представляет ваш модальный контроллер представлений, когда он находится в соответствующей ориентации. См. образец Apple AlternateViews код для примера.

Уведомления отражают физическую ориентацию устройства, и вы можете получить их, разрешено ли изменять интерфейс или нет. (Вы можете посмотреть свойство statusBarOrientation свойства UIApplications, чтобы узнать, в какой ориентации находится пользовательский интерфейс).

1

это звучит, как вы хотите, чтобы последовательность идти, как это:

  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]; 
    } 
} 

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

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

Смежные вопросы