2012-07-30 3 views
5

Sto provando a creare una sequenza personalizzata in modo che il controller della vista di destinazione scorra dall'alto.Il controller della vista di origine si nasconde durante i passaggi personalizzati

Ho scritto il mio codice in base all'esempio da the documentation.

Il problema è che quando viene eseguito il seguito, il controller della vista sorgente diventa nero e quindi si verifica l'animazione. Come posso evitare che il controller della vista sorgente diventi nero?

(ho già provato l'implementazione della soluzione presentata in this answer ma lo schermo o diventa nero dopo la transizione, o torna al controller della vista di origine.)

Ecco il mio codice:

-(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]; 
} 
+0

La soluzione è incredibilmente semplice. È necessario terminare l'animazione PRIMA di presentare il nuovo controller di visualizzazione. Non c'è nient'altro. – Fattie

risposta

3

La ragione che il controller della vista sorgente sembra essere nascosto è che il controller della vista di destinazione viene presentato subito.

Durante la scrittura di segui personalizzati non sono disponibili entrambe le visualizzazioni contemporaneamente. Si potrebbe o

  • spinta controller della vista, aggiungere la vista di origine al controller della vista di destinazione e animare
  • aggiungere la vista di destinazione al controller vista origine e animare, quindi spingere View Controller
  • spinta a un a -tra visione del controller, aggiungere entrambe le viste, animare, premere sul controller della vista di destinazione.

In tutti i casi precedenti in cui dico i controller di visualizzazione push, è possibile visualizzare i controller di visualizzazione in modo modale. In realtà ciò potrebbe essere più adatto per la soluzione di controllo della vista intermedia.

+0

Ho provato la seconda opzione che hai citato e funziona perfettamente. Ecco il codice: https://gist.github.com/3206340 Ma quale delle tre opzioni menzionate è la più efficiente? – Eric

+0

Non c'è molta differenza di efficienza tra di loro. Dovresti scegliere quello che ti sembra più pulito, più semplice da capire e da mantenere per te. Per il codice di produzione, sceglierei personalmente la terza opzione, poiché non interferirebbe con la gerarchia delle viste della sorgente o della destinazione durante l'animazione. Ma è una questione di gusti. –

+0

@ DavidRönnqvist Sto tentando un pop seguito piuttosto che un push segue, ma essenzialmente sto seguendo l'opzione 1, e la mia vista sorgente non è animata. Puoi dare un'occhiata al codice in [la mia domanda] (http://stackoverflow.com/questions/13036014/view-transition-doesnt-animate-during-custom-pop-segue)? – glorifiedHacker

Problemi correlati