Am o problemă similară.
Am un joc de lucru în orientarea peisaj (atât la stânga și dreapta peisaj).
Pentru a gestiona o aplicație multi-view, am folosi un UIviewController rădăcină, adică un UIViewcontroller fals cu un UIView care nu face nimic. Apoi am adăuga orice alt UIView să-l ca subview.
La pornirea aplicației, emulator se rotește rapid la o orientare portret, și I a lua fiecare dintre opiniile mele cu proprietatea rama sa aratand ca (0, -80320480). Aceasta are ca rezultat vizualizarea fiind tăiate de un dreptunghi de 160 x 320 în partea dreaptă.
Am observat că - shouldAutorotateToInterfaceOrientation: metoda de fiecare subview este numit doar o singură dată, iar acest lucru se întâmplă atunci când se adaugă la vizualizarea rădăcină. Mai târziu, la rotirea dispozitivului, numai punctul de vedere devine rădăcină este metoda numită.
Normal, oricare dintre metodele * - willAnimate apelurile sunt trimise numai la vizualizarea rădăcină, astfel încât, definind oricare dintre aceste metode în subviews este inutilă.
Aceste metode sunt numite de fiecare dată orientarea este schimbat la o orientare acceptată de - shouldAutorotateToInterfaceOrientation: metoda. așa că am gândit că ar putea chnage proprietatea cadru subviews mei de acolo.
Pentru a realiza acest lucru, am definit următoarea metodă din clasa mea 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);
...
}
Nu înțeleg de ce proprietatea de cadru nu este actualizat, dar știu că funcționează această soluție.
Sper că acest lucru vă ajută....