6

Sto tentando di presentare un VC su un VC utilizzando UIModalPresentationCurrentContext per visualizzare la vista dietro di esso. Il seguente codice funziona:UIModalPresentationCurrentContext - Metodi di rotazione non chiamati

UIViewController *transparentViewController = [[UIViewController alloc] init]; 
self.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentViewController:transparentViewController animated:NO completion:^{ 
}]; 

Tuttavia, quando ho ruotare il dispositivo dopo la VC è stato spinto rotazione sembra completamente incasinato. Invece di ruotarlo in modo pulito allunga la vista in modo maldestro per adattarsi al nuovo orientamento.

Inoltre, quando sottoclassi il controller trasparenteView, scopro che i suoi metodi viewwillautorotate non vengono chiamati! (Anche se sta ruotando nel suo modo di animazione incasinato)

Lo stile UIModalPresentationCurrentContext non è pensato per ruotare? C'è un modo per aggirare questo? Qualcun'altro ha riscontrato questo problema?

+0

Hai trovato una soluzione a questo? Sto affrontando lo stesso problema .. – stonemonk

+0

Lo stesso qui. Soluzione? –

risposta

0

Credo che il problema sia legato al controller di visualizzazione originale che non è in grado di ruotare, quindi il controller di visualizzazione modale è anche bloccato dalla rotazione. Per aggirare questo problema è possibile eseguire il rendering dello CALAyer utilizzando il metodo renderInContext. Quindi puoi posizionarlo in un UIImageView nella parte inferiore della gerarchia della vista nel tuo controller della visualizzazione modale. Ciò avrà l'effetto che il controller della vista apparirà trasparente, dal momento che stai vedendo cosa c'era dietro in un'immagine falsa statica. Quindi, quando si ruota il UIViewController, è possibile applicare manualmente un valore CGAffineTransform allo UIImageView in modo da mantenere lo sfondo in posizione mentre il contenuto su di esso è libero di ruotare.

+0

D, grazie per la risposta. Il controller di visualizzazione originale in questo caso è in grado di ruotare, tuttavia, si comporta allo stesso modo indipendentemente dal fatto che sia o non sia consentito ruotare. La soluzione che proponi è buona, cosa succederebbe se la vista dietro gli aggiornamenti? Sarebbe meglio utilizzare la trasparenza. Inoltre, il CGAffineTransform sullo screenshot non potrebbe ancora ruotare per compensare la rotazione del dispositivo, mostrando un'animazione che non si verificherebbe se lo sfondo non fosse chiaramente in grado di ruotare? –

+0

Ah, ho capito male che il controller di visualizzazione originale era in grado di ruotare. Non sono sicuro di come risolvere il problema allora. – DHamrick