Nie jestem pewien, czy są jakieś dziwne skutki uboczne z tego wdrożenia, ale spróbuj coś takiego i sprawdzić, czy to działa dla Ciebie:
-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
if (UIInterfaceOrientationIsPortrait(orientation)) {
[[NSBundle mainBundle] loadNibNamed:@"MenuView" owner:self options:nil];
if (orientation == UIInterfaceOrientationPortraitUpsideDown) {
self.view.transform = CGAffineTransformMakeRotation(M_PI);
}
} else if (UIInterfaceOrientationIsLandscape(orientation)){
[[NSBundle mainBundle] loadNibNamed:@"MenuViewLandscape" owner:self options:nil];
if (orientation == UIInterfaceOrientationLandscapeLeft) {
self.view.transform = CGAffineTransformMakeRotation(M_PI + M_PI_2);
} else {
self.view.transform = CGAffineTransformMakeRotation(M_PI_2);
}
}
}
zakłada to, że plik jest Właściciel w MenuView i MenuViewLandscape XIB są ustawione zarówno na MenuViewController, jak i na to, że punkt widokowy jest ustawiony również na XIB. Wszystkie gniazda wyjściowe powinny być prawidłowo podłączone po obróceniu podczas używania loadNibNamed
.
Jeśli budujesz dla iOS 4, można również wymienić loadNibNamed
linie z nich:
UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;
i
UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;
te zakładają, że UIView, że chcesz, aby natychmiast wyświetlić następuje po Obiekty proxy pliku i pierwszego obiektu odpowiadającego w XIB.
Następnie wystarczy upewnić się, że widoki są odpowiednio obrócone dla orientacji interfejsu. W przypadku wszystkich widoków, które nie mają domyślnej orientacji pionowej, należy je obrócić, ustawiając właściwość transform
widoku i używając wartości CGAffineTransformMakeRotation()
z odpowiednimi wartościami, jak pokazano w powyższym przykładzie.
Sam obrót może rozwiązać problem bez dodatkowego obciążenia NIB. Jednak załadowanie zupełnie nowego wystąpienia obiektu MenuViewController
i ustawienie jego widoku na istniejący widok MenuViewController
może spowodować dziwne zachowanie w przypadku zdarzeń cyklu życia i rotacji, więc bezpieczniejsze może być wypróbowanie powyższych przykładów. Pozwalają również zaoszczędzić sobie trudu tworzenia nowych instancji MenuViewController
, gdy potrzebujesz tylko widoku z tego.
Mam nadzieję, że to pomoże!
Justin
Wszelkie szczęścia z tym? – RefuX
zobacz odpowiedź poniżej –