non sono sicuro ci sono strani effetti collaterali con questa implementazione, ma provare qualcosa di simile e vedere se funziona per voi:
-(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);
}
}
}
Ciò presuppone che il proprietario del file nel vostro MenuView e MenuViewLandscape XIBs sono entrambi impostati su MenuViewController e la vista è impostata su entrambi gli XIB. Tutte le prese devono essere correttamente ricollegate alla rotazione quando si utilizza loadNibNamed
.
Se si sta costruendo per iOS 4, si potrebbe anche sostituire le loadNibNamed
linee con questi:
UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;
e
UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;
Questi supporre che l'UIView che si desidera visualizzare immediatamente segue il Proprietario del file e oggetti proxy First Responder negli XIB.
Quindi è necessario assicurarsi che le viste siano ruotate correttamente per l'orientamento dell'interfaccia. Per tutte le viste che non hanno l'orientamento verticale predefinito, ruotale impostando la proprietà transform
della vista e utilizzando CGAffineTransformMakeRotation()
con i valori appropriati, come mostrato nell'esempio sopra.
La rotazione da sola potrebbe risolvere il problema senza il carico aggiuntivo dei NIB. Tuttavia, il caricamento di un'intera nuova istanza di MenuViewController
e l'impostazione della sua vista sulla vista esistente di MenuViewController
potrebbe causare alcuni strani comportamenti con gli eventi del ciclo di vita e di rotazione, pertanto potrebbe risultare più sicuro provare gli esempi sopra riportati. Inoltre ti risparmiano la fatica di dover creare nuove istanze MenuViewController
quando ti serve solo la vista.
Spero che questo aiuti!
Justin
Hai avuto fortuna con questo? – RefuX
vedere la risposta sotto –