Контроллер представления исходного кода скрывается во время пользовательского перехода

Я пытаюсь сделать собственный переход, чтобы контроллер представления назначения скользил сверху вниз.

Я написал свой код по примеру из документации.

Проблема в том, что когда выполняется переход, исходный контроллер представления становится черным, а затем происходит анимация. Как я могу предотвратить исчезновение исходного контроллера представления?

(Я уже пытался реализовать решение, представленное в этом ответе, но экран либо становится черным после перехода, либо возвращается к исходному контроллеру представления.)

Вот мой код:

-(void)perform{

    UIViewController *splashScreen = self.sourceViewController;
    UIViewController *mainScreen = self.destinationViewController;

    //Place the destination VC above the visible area        
    mainScreen.view.center = CGPointMake(mainScreen.view.center.x,
                                          mainScreen.view.center.y-600);

    //Animation to move the VC down into the visible area
    [UIView animateWithDuration:1
                     animations:^{
                         mainScreen.view.center = CGPointMake(mainScreen.view.center.x, [[UIScreen mainScreen] bounds].size.height/2 );
                     }
     ];

    [splashScreen presentModalViewController:mainScreen animated:NO];
}

person Eric    schedule 30.07.2012    source источник
comment
Решение невероятно простое. Вы должны закончить анимацию ДО того, как представите новый контроллер представления. Больше ничего нет.   -  person Fattie    schedule 21.06.2016


Ответы (1)


Причина, по которой ваш исходный контроллер представления кажется скрытым, заключается в том, что контроллер целевого представления представлен сразу.

Когда вы пишете пользовательские переходы, у вас нет обоих представлений, доступных одновременно. Вы могли бы либо

  • push-контроллер представления, добавьте исходное представление к целевому контроллеру представления и анимируйте
  • добавьте целевое представление в контроллер исходного представления и анимируйте, затем нажмите контроллер представления
  • нажмите на промежуточный контроллер представления, добавьте оба представления, анимируйте, нажмите на целевой контроллер представления.

Во всех приведенных выше случаях, когда я говорю о push-контроллерах представления, вы могли бы вместо этого представить контроллеры представления модально. На самом деле это может быть более подходящим для промежуточного решения контроллера представления.

person David Rönnqvist    schedule 30.07.2012
comment
Я попробовал второй вариант, который вы упомянули, и он отлично работает. Вот код: gist.github.com/3206340 Но какой из трех упомянутых вами вариантов наиболее эффективен ? - person Eric; 30.07.2012
comment
Между ними нет большой разницы в эффективности. Вы должны выбрать тот, который кажется вам самым чистым, простым для понимания и обслуживания. Для производственного кода я бы лично выбрал третий вариант, так как он не будет мешать иерархии представлений ни источника, ни места назначения во время анимации. Но это дело вкуса. - person David Rönnqvist; 30.07.2012
comment
@DavidRönnqvist Я пытаюсь перейти к всплывающему, а не к push-переходу, но, по сути, я следую варианту 1, и мое исходное представление не анимируется. Не могли бы вы взглянуть на код в мой вопрос? - person glorifiedHacker; 23.10.2012