Mám podobný problém.
Mám hra pracující v orientaci na šířku (levé i pravé krajiny).
Za účelem řízení aplikace multi-view I použít kořenový UIviewController, tedy fiktivní UIViewcontroller s UIView který nedělá nic. pak přidám každý druhý UIView k němu jako subview.
Při spuštění aplikace, emulátor rychle otáčí na orientaci na výšku, a jsem si každý jeden z mých názorů to s rámem vlastnost vypadá jako (0, -80,320,480). To má za následek zobrazení je oříznut na 160 X 320 obdélníku na pravé straně.
Všiml jsem si, že - shouldAutorotateToInterfaceOrientation: metoda každého subview se nazývá pouze jednou, a to se stane, když se přidává do zobrazení root. Později, při otáčení přístroje, pouze zobrazení kořenové dostane to je metoda volána.
Není překvapením, že některý z - willAnimate * metody volání jsou zasílány pouze na zobrazení kořenové, takže definuje některé z těchto metod v subviews je zbytečné.
Tyto metody se nazývají pokaždé orientace se změní na orientaci akceptovaném - shouldAutorotateToInterfaceOrientation: metoda. Tak jsem mohl chnage frame vlastnictví mých subviews' odtamtud.
K dosažení tohoto cíle, je definováno I následující metodu v mém rootViewController třída:
- (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);
...
}
Nechápu, proč se daná nemovitost rám není aktualizován, ale vím, že toto řešení funguje.
Snad to pomůže....