È possibile utilizzare le transizioni IOS 7 UIViewController (Interactive specificamente) con i controller di vista figlio?

StackOverflow https://stackoverflow.com//questions/22003967

Domanda

Ci sono molti tutorial che fluttuano intorno all'utilizzo della nuova API di Transizioni IOS 7 UIViewController e la nuova API di transizione interattiva nuova. Tuttavia, nessuno di questi sembra di fare riferimento ad aggiungere e rimuovere i controllori della vista infantile in modo interattivo, nonostante nel video WWDC 2013 sulle transizioni personalizzate UIViewController, il dipendente Apple mostra ciò che avrei immaginato di essere un controller di vista figlio presentato con una transizione personalizzata:

Inserisci Descrizione dell'immagine qui

(Sto supponendo che questo come controller di vista sia mostrato in cima a un altro apparentemente. Non penso che tu possa passare a un nuovo UIViewController mantenendo l'altro visibile dietro di esso ...)

È possibile ottenere una cosa del genere con i controller di vista figlio?

Nella mia situazione specifica, sto aggiungendo una galleria di immagini UIPageViewController come controller di visualizzazione figlio, ma è comunque possibile visualizzare il controller di visualizzazione che è stato aggiunto se l'immagine che il UIPageViewController non occupa lo schermo intero. Ho anche aggiunto la possibilità di far scorrere la schermata di un'immagine OFF (simile a IOS 7 Multi-Tasking Close) e mi piacerebbe che sia un pop controller di vista interattivo.

Ci sono tutorial per una cosa del genere? È anche possibile? Sarebbe meglio fatto con presentViewController in qualche modo che mi consentirebbe di visualizzare il controller di visualizzazione sotto?

È stato utile?

Soluzione

Se guardi il video di nuovo noterai alle 12:15 Riferirai il UIModalPresentationCustomTagCode di presentazione supportato. Questo stile di presentazione significa che la vista "da" controller di vista non viene rimossa dalla gerarchia di vista, consentendoti di creare i tuoi moduli. Quindi, nel tuo caso, faresti quanto segue:

//insert code where you want the presentation to begin

UIPageViewController *pageVC = [[UIPageViewController alloc] init];
pageVC.modalPresentationStyle = UIModalPresentationCustom;
id<UIViewControllerTransitioningDelegate> transitionDelegate = [self transitionDelegate];
[self presentViewController:pageVC animated:YES completion:nil];
.

L'oggetto di transizione dell'animazione sarebbe responsabile di garantire che il telaio dei controller di visualizzazione della pagina non sia a schermo intero. Basta attenzione alle implicazioni della gestione di due controller di visualizzazione complessi allo schermo allo stesso tempo. Consiglierei piuttosto a scattare un'istantanea del tuo primo controllore di visualizzazione vista e quindi renderlo lo sfondo del secondo controllo dei controller Vista. Il controller di visualizzazione della pagina sarebbe quindi un figlio del secondo controller.

Potresti trovare questo tutorial utile - http://www.teehanlax.com/ Blog / personalizzato-UIViewController-Transitions /

Meglio ancora, qualcuno ha fatto un andare al campione di replicazione di Session 218 su GitHub - https://github.com/soleares / SolpresentingFun

Happy CoDing

Altri suggerimenti

Sembra che tu voglia fare una transizione personalizzata con un contenitore UIViewController. Questa è una proposta Tricker rispetto alle transizioni tipiche perché è necessario fornire l'oggetto che implementa UIViewControllerContextTransitioning da solo.

Nonostante tutti i metodi richiesti, questo protocollo non è difficile da implementare. La maggior parte dei metodi sono evidenti. Dato che vuoi una transizione interattiva, dovrai affrontare alcuni ostacoli che non ho ancora affrontato. Ecco alcuni suggerimenti che ho scoperto durante l'implementazione di questo protocollo:

    .
  1. Non aver paura di definire le tue chiavi per: viewControllerForKey:. Ho trovato che avevo bisogno di un riferimento al controller di visualizzazione dei genitori nel mio oggetto animatore. La soluzione più pulita stava definendo un altro tasto per passare a questo metodo. Funziona molto bene se l'oggetto che implementa questo protocollo è anche il controller di visualizzazione dei genitori.

  2. Vendi il tuo animatore chiamando animationControllerForPresentedController:presentingController:sourceController invece di istanziare il tuo animatore da solo. Ancora una volta, questo sembrava un approccio più pulito poiché opera nell'intento dei protocolli. Questo è il metodo che sarebbe altrimenti chiamato come parte del presentViewController:animated:completion:.

  3. Usa UIModalPresentationNone. Dal momento che stai specificamente parlando di controller di View per bambini che non stai davvero facendo una presentazione modale.

  4. Aggiungi le chiamate di contenimento del controller di visualizzazione, ad es. addChildViewController: nel tuo animatore. È qui che aggiungerai il tuo nuovo controller di visualizzazione alla gerarchia del controller di visualizzazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top