2008-12-10 11 views
12

Spojrzałem na każde pytanie do tej pory i nikt nie wydaje się odpowiedzieć na to pytanie.Jak wyświetlić jedno UIView w krajobrazie?

Utworzono kontroler UITabBarController i dodano do niego kilka kontrolerów widoku. Większość widoków jest wyświetlana w układzie pionowym, ale należy patrzeć w krajobraz. Nie chcę używać akcelerometru ani wykrywać, gdy użytkownik obraca urządzenie, chcę wyświetlić widok w trybie poziomym, gdy wybierze ten widok z zakładki na dole.

Chcę, aby pojawiały się regularne animacje, takie jak opuszczenie karty, obracanie widoku itp., Gdy wybierają ten element, a dzieje się odwrotnie, gdy wybierają inny widok.

Czy nie ma wbudowanej właściwości lub metody informującej system, jaką orientację ma wyświetlić widok?

Przesłanianie metody shouldautorotate ... nie robi absolutnie nic, o ile mogę powiedzieć.

Rodzaj odpowiedź NIE doceni to „RTFM”, ponieważ już mam, a ktoś, kto opracowany dla iPhone do tej pory nie wie, że jest bardzo mało przydatna M do F-ing R.

Odpowiedz

9

post na forum, które może pomóc. Krótka odpowiedź brzmi: trzeba ręcznie obracać widok lub kontrolera raz pogląd został sporządzony w viewWillAppear: metoda

CGAffineTransform landscapeTransform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
landscapeTransform = CGAffineTransformTranslate (landscapeTransform, +80.0, +100.0); 

[[appDelegate navController].view setTransform:landscapeTransform]; 
+0

Nie bierze pod uwagę żadnej z animacji (zakładka, pasek stanu itp.). –

+0

Mimo to użycie metody setStatusBarOrientation wydaje się być sposobem obejścia tego problemu. –

9

Oto co robię to zrobić:

najpierw umieścić to określenie u góry pliku, tuż pod #imports:

#define degreesToRadian(x) (M_PI * (x)/180.0) 

następnie w viewWillAppear: metoda

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 

jeśli chcesz, aby być animowane, można zawinąć całość w bloku animacji, tak jak poniżej:

[UIView beginAnimations:@"View Flip" context:nil]; 
[UIView setAnimationDuration:1.25]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; 

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];  
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) { 
    self.view.transform = CGAffineTransformIdentity; 
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90)); 
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320); 
} 
[UIView commitAnimations]; 
0

zastąpić metodę Orientacja w swojej klasie kontrolera i zmusić go do krajobrazu tak:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    // Overriden to allow any orientation. 
    return UIInterfaceOrientationIsLandscape(interfaceOrientation); 
} 

Proste i wydajne!

0

shouldAutorotateToInterfaceOrientation działa tylko wtedy, gdy wszystkie widoki kontrolera tabbarcontroller lub wszystkich kontrolerów widoku w navigationcontroller zgadzają się na obrót.

Powiązane problemy