Ho un problema simile.
Ho un gioco di lavoro con orientamento orizzontale (sia a sinistra che a destra del paesaggio).
Per gestire un'applicazione multi-view uso un UIViewController radice, cioè un UIViewController fittizio con un UIView che non fa nulla. Ho quindi aggiungere tutti gli altri UIView ad esso come una visualizzazione secondaria.
Quando si avvia l'applicazione, l'emulatore ruota rapidamente a un orientamento verticale, e ottengo ognuno dei miei punti di vista con esso è di proprietà telaio guardando come (0, -80.320.480). Ciò risulta nella vista essendo ritagliati da un rettangolo 160 X 320 sul lato destro.
Ho notato che il - shouldAutorotateToInterfaceOrientation: Metodo di ciascuna sottomaschera viene chiamato solo una volta, e che accade quando viene aggiunto alla visualizzazione principale. Successivamente, quando si ruota il dispositivo, solo la vista radice prende il suo metodo chiamato.
Non sorprende, uno qualsiasi dei metodi - willAnimate * chiamate sono trasmessi soltanto alla vista radice, quindi, definendo uno di questi metodi in subviews è inutile.
Questi metodi sono chiamati ogni volta che l'orientamento è cambiato in un orientamento accettato dal - shouldAutorotateToInterfaceOrientation: metodo. così ho pensato che avrei potuto chnage proprietà telaio miei subviews' da lì.
Per fare questo, ho definito il seguente metodo nella mia classe RootViewController:
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation duration:(NSTimeInterval)duration
{
subview1_ViewController.view.frame = CGRectMake(0,0,480,320);
subview2_ViewController.view.frame = CGRectMake(0,0,480,320);
...
}
Non capisco il motivo per cui la proprietà telaio non è aggiornato, ma so che questa soluzione funziona.
Spero che questo ti aiuti....