2009-08-29 10 views
19

Widziałem innych ludzi, którzy mieli to pytanie, ale większość odpowiedzi nie działa na najnowszej wersji 3.0 systemu iPhone OS. W każdym razie, zastanawiam się, jak mogę programowo obrócić UIView bez jakiegokolwiek wejścia z akcelerometru. Kod, który znalazłem do tej pory:Obróć UIView w Cocoa Touch

CGAffineTransform transform = CGAffineTransformMakeRotation(3.14159/2); 
view.transform = transform; 
CGRect contentRect = CGRectMake(-80, 80, 480, 320); 
view.bounds = contentRect; 

To jednak nie działa dla UIView (w moich testach). Czy jest coś, co muszę zrobić, aby mój AppDelegate działał, aby ten/inny kod działał, czy istnieje lepszy sposób robienia tego samego?

Dzięki za pomoc!

Odpowiedz

40

to działa na mnie

CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2); 
self.view.transform = transform; 

// Repositions and resizes the view. 
CGRect contentRect = CGRectMake(0,0, 480, 320); 
self.view.bounds = contentRect; 
+14

Użyj M_PI zamiast 3.14159 –

+32

Użyj M_PI_2 zamiast M_PI/2 – Allyn

1

miałem sukces, że:

CATransform3D rotationTransform = CATransform3DIdentity; 
[view.layer removeAllAnimations]; 
rotationTransform = CATransform3DRotate(rotationTransform, angle, 0.0, 0.0, 1); 
view.layer.transform = rotationTransform; 
+0

Cześć Marco: W powyższym kodzie, jaki byłby "kąt"? – PF1

+1

Ponadto wydaje się, że nie można go zbudować, mimo że zaimportowałem strukturę QuartzCore. – PF1

+0

Kąt jest kątem promieni słonecznych, widok zostanie obrócony. Nie zbuduje go może z powodu innych błędów. Co mówi dziennik kompilacji? – Marco

0

Nie wiem, czy to jest traktowane jako prywatne API, więc może nie chcesz go używać, ale jeśli chcesz Aby wymusić zmianę orientacji bez przechylania urządzenia, możesz spróbować zadzwonić:

[[UIDevice currentDevice] performSelector:@selector(setOrientation:) 
         withObject:(id)UIInterfaceOrientationLandscapeLeft]; 

Nie testowałem tego nadal działa w wersji 3.1.2. choć wiem, że działa w wersji 3.0.

Powiązane problemy