2014-11-10 26 views
9

Sto utilizzando il VFR PDF viewer library nella mia app, dove presento così:non willRotateToInterfaceOrientation chiamati iOS 8

ReaderDocument *document = [ReaderDocument withDocumentFilePath:pdfFile password:nil]; 
ReaderViewController *vc = [[ReaderViewController alloc] initWithReaderDocument:document]; 
[self.navigationController pushViewController:vc animated:YES]; 

Se corro su iOS7, tutto funziona bene.

Se eseguo la mia app su iOS8, il metodo willRotateToInterfaceOrientation in ReaderViewController non viene mai chiamato, quindi quando il dispositivo viene ruotato il documento non viene riformattato correttamente.

Tuttavia, se eseguo l'app dimostrativa fornita con la libreria su iOS8, viene richiamata willRotateToInterfaceOrientation in ReaderViewController, il che mi porta a credere che la libreria sia ok e sto facendo qualcosa di sbagliato (o trascurando di farlo qualcosa) nella mia app.

Sono piuttosto perplesso per questo comportamento. Perché willRotateToInterfaceOrientation non viene chiamato nella mia app su iOS8, ma nelle altre varianti? Come posso provare a rintracciarlo?

risposta

12

Sono finalmente riuscito a risolvere il mio problema; ecco qual è il problema nel caso in cui qualcun altro abbia lo stesso problema.

Il mio ReaderViewController veniva presentato da una classe che aveva implementato viewWillTransitionToSize:withTransitionCoordinator:, quindi i metodi deprecati sui controller di vista figlio non venivano chiamati.

Anche in che l'attuazione non stava chiamando

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator] 

e quindi il metodo di tutti i controller Bambini viewWillTransitionToSize:withTransitionCoordinator: non veniva chiamato sia.

La correzione è stato quello di aggiungere una chiamata al

[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator] 

nel metodo del genitore del VC viewWillTransitionToSize:withTransitionCoordinator:, sottoclasse ReaderViewController, quindi aggiungere un viewWillTransitionToSize:withTransitionCoordinator: al mio sottoclasse di chiamare i metodi appropriati in ReaderViewController.

+0

Mentre riesci a risolvere il tuo problema, puoi convalidare la tua risposta come risposta accettata in modo che gli altri sappiano che è stata risolta. – HpTerm

3

Semplicemente perché willRotateToInterfaceOrientation non è più chiamato in iOS8, è deprecato.

Se i nuovi metodi di rotazione non sono implementati, e un progetto è compilato con l'IOS 8 SDK, il controller di vista non -Will ricevono calls- ai metodi di rotazione obsoleti.

Una domanda simile al vostro possono essere trovate here

Visto di @mluisbrown:

I metodi di rotazione sono obsoleti nel IOS 8 SDK. Ciò non avrà alcun effetto sulle app create con l'SDK di iOS 7, anche su iOS e probabilmente su diverse versioni future di iOS.

Ho faticato un po 'con qualche tipo di problema simile al tuo. Ho provato a seguire la raccomandazione di Apple di utilizzare viewWillTransitionToSize, che nel mio caso non ha risolto il mio problema perché questo viene attivato solo sulle modifiche da regolare a compatto, ad esempio un non a rotazione.

viewWillTransitionToSize: withTransitionCoordinator: per effettuare regolazioni basate su interfaccia .

che è dettagliato in apple documentation

anche un video di WWDC 2014 spiega questo, ma non riesco a ricordare che il video è stato. Forse quello su What's new in Cocoa touch o quello su View Controller Advancements in iOS 8.

EDIT

Si noti che nel mio caso viewWillTransitionToSize, come spiegato, non è stato chiamato perché io non stavo cambiando da regolare per compattare quindi non c'era transizione dimensioni, a rigor di termini per Apple.

L'unica soluzione che ho trovato è stata gestirla manualmente nel viewDidLayoutSubviews del controller di visualizzazione corrispondente.

Nel mio caso, volevo tenere traccia della cella superiore visualizzata in una vista tabella con l'autolayout. Poiché non era tracciato automaticamente dal sistema, dovevo controllarlo manualmente e scorrere manualmente verso la cella adeguata alla rotazione. Ecco perché l'ho fatto in quel modo. È abbastanza "pesante" ma funziona nel mio caso.

Sarei anche interessato se qualcuno ha una soluzione più semplice.

+0

Ho aggiunto un viewWillTransitionToSize: withTransitionCoordinator: metodo per la classe ReaderViewController e non viene richiamato neanche sulla rotazione del dispositivo. Devo fare qualcosa oltre ad aggiungere quel metodo? –

+0

Una rotazione non è esattamente una transizione di dimensione. Apple presume che sia uno nel caso in cui si passa da una dimensione compatta a una normale in orizzontale o verticale. Nel mio caso per rilevare la rotazione ho dovuto gestire il comportamento manualmente nella viewDidAppear del controller specificato. Purtroppo non ho trovato nessun altro facile era farlo. – HpTerm

+1

Ora sono ancora più confuso! viewDidAppear viene chiamato solo quando viene visualizzata la vista, non quando il dispositivo viene ruotato, quindi non capisco come si gestisce il comportamento lì. –

Problemi correlati