Mam podobny problem.
Mam gra działa w orientacji poziomej (zarówno z lewej i prawej krajobrazu).
W celu zarządzania aplikacji Multi-view używam UIViewController korzeniowy, tj obojętne UIViewController z UIView, że nic nie robi. Następnie dodać każdy inny UIView do niego jako podrzędny.
Po uruchomieniu aplikacji, emulator szybko obraca się do orientacji pionowej, a ja dostać każdy z moich poglądów z jego własność wygląda jak rama (0, -80,320,480). Prowadzi to do widzenia jest obcięta przez 160 x 320 prostokąt po prawej stronie.
Zauważyłem, że - shouldAutorotateToInterfaceOrientation: Metoda każdego podrzędny jest wywoływana tylko raz, i to się dzieje, gdy jest on dodawany do widoku głównego. Później, podczas obracania urządzenia, tylko widok główny dostaje to metoda nazywa.
Nic więc dziwnego, każdy z - willAnimate * Metody połączeń są wysyłane tylko do widoku głównego, tak, definiowanie dowolnej z tych metod w subviews ma sensu.
Metody te są nazywane każdym orientacja zmienia się na orientacji przyjętej przez - shouldAutorotateToInterfaceOrientation: metoda. więc pomyślałem mogłem chnage właściwość ramki moich subviews' stamtąd.
Aby to osiągnąć, I zdefiniowano następujące metody w mojej klasie 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);
...
}
Nie rozumiem, dlaczego właściwość rama nie jest aktualizowana, ale wiem, że to rozwiązanie działa.
Mam nadzieję że to pomoże....