Je ne suis pas sûr qu'il ya des effets secondaires étranges avec cette mise en œuvre, mais essayer quelque chose comme ça et voir si cela fonctionne pour vous:
-(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);
}
}
}
Cela suppose que le propriétaire du fichier dans votre MenuView et Les XIB MenuViewLandscape sont tous les deux définis sur MenuViewController et la prise de vue est également définie dans les deux XIB. Toutes vos prises doivent être reconnectées correctement lors de la rotation lorsque vous utilisez loadNibNamed
.
Si vous construisez pour iOS 4, vous pouvez aussi remplacer les loadNibNamed
lignes avec celles-ci:
UINib *nib = [UINib nibWithNibName:@"MenuView" bundle:nil];
UIView *portraitView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = portraitView;
et
UINib *nib = [UINib nibWithNibName:@"MenuViewLandscape" bundle:nil];
UIView *landscapeView = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];
self.view = landscapeView;
Ces supposer que le UIView que vous souhaitez afficher suit immédiatement la Les objets proxy du propriétaire du fichier et du premier répondeur dans les XIB.
Ensuite, vous avez juste besoin de vous assurer que les vues sont tournées correctement pour l'orientation de l'interface. Pour toutes les vues qui ne sont pas dans l'orientation portrait par défaut, faites-les pivoter en définissant la propriété transform
de la vue et en utilisant CGAffineTransformMakeRotation()
avec les valeurs appropriées comme indiqué dans l'exemple ci-dessus. La rotation seule peut résoudre votre problème sans le chargement supplémentaire des NIB. Toutefois, le chargement d'une nouvelle instance entière d'un MenuViewController
et la définition de sa vue à l'affichage existant de MenuViewController
peuvent provoquer un comportement étrange avec les événements de cycle de vie et de rotation, vous pouvez donc être plus sûr en essayant les exemples ci-dessus. Ils vous évitent également de devoir créer de nouvelles instances MenuViewController
lorsque vous en avez seulement besoin.
Espérons que cela aide!
Justin
Toute chance avec cela? – RefuX
voir la réponse ci-dessous –