Jeg har et lignende problem.
Jeg har et spill som arbeider i liggende retning (både venstre og høyre liggende).
For å håndtere en multi-view-programmet jeg bruker en rot UIviewController, dvs. en dummy UIViewcontroller med en UIView som ikke gjør noe. Jeg deretter legge alle andre UIView til det som en subview.
Når du starter programmet, roterer emulator raskt til en stående, og jeg får hver og en av mine synspunkter med sin ramme eiendom ser ut som (0, -80320480). Dette resulterer i at gjenstanden er klippet av en 160 X 320 rektangel på den høyre side.
Jeg har lagt merke til at - shouldAutorotateToInterfaceOrientation: metode for hver subview bare kalles en gang, og det skjer når det er lagt til roten visning. Senere, når du roterer enheten, bare roten visningen blir det metode kalt.
Ikke overraskende hvilket som helst av de - er willAnimate * Metode anrop bare sendes til roten vis, så som definerer en hvilken som helst av disse metodene i subviews er meningsløs.
Disse metodene er kalt hver gang retningen endres til en orientering akseptert av - shouldAutorotateToInterfaceOrientation: metode. så jeg tenkte jeg kunne chnage mine subviews' ramme eiendom derfra.
For å oppnå dette, definert jeg følgende metode i min rootViewController klasse:
- (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);
...
}
Jeg forstår ikke hvorfor rammen eiendommen ikke er oppdatert, men jeg vet at denne løsningen fungerer.
Håper dette hjelper....