Mon application universelle est une vue unique en mode plein écran. En appuyant sur un bouton flips pour révéler une page de paramètres:iOS: AutoRotation entre NIBs
- (void) showSettings
{
FlipsideViewController * flipsideVC = [FlipsideViewController alloc];
NSString * settingsNib;
if (isIPad())
settingsNib = isCurrentlyPortrait() ? @"settings_iPad_portrait" : @"settings_iPad_landscape";
else
settingsNib = @"settings_iPhone";
[flipsideVC initWithNibName: settingsNib
bundle: nil ];
flipsideVC.delegatePointingToMainVC = self;
flipsideVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: flipsideVC
animated: YES ];
[flipsideVC release];
}
et la page des paramètres appelle la méthode déléguée: Je Recréez la vue principale à la lumière des paramètres modifiés, et retourner en arrière.
- (void) settingsDidQuit:(FlipsideViewController *) flipsideVC
{
[self createOrRecreateWheelView];
[self dismissModalViewControllerAnimated: YES];
}
Mais que se passe-t-il si l'utilisateur fait pivoter l'iPad sur la page des paramètres? Apple décrète que mon application doit gérer cela. Mais comment faire cela? puis-je charger dynamiquement un nouveau XIB pour la page des paramètres?
Je ne vois pas une façon de le faire, donc ma tentative de solution est d'attraper la rotation dans l'écran des paramètres, ...
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
[self.delegatePointingToMainVC settingsOrientationChanged];
}
... et rappeler au contrôleur principal de vue , qui dissout le contrôleur de vue des paramètres et le recrée à la lumière de l'orientation actuelle.
- (void) settingsOrientationChanged
{
[self dismissModalViewControllerAnimated: YES];
[self showSettings];
}
Il y a un problème trivial tout de suite - didRotateFromInterfaceOrientation se déclenche automatiquement lorsque les paramètres page se charge. Je peux empêcher cela en définissant une valeur booléenne false dans init, et modifiant ainsi: problème
- (void) didRotateFromInterfaceOrientation: (UIInterfaceOrientation) oldInterfaceOrientation
{
if (initialized)
[self.delegatePointingToMainVC settingsOrientationChanged];
initialized = true;
}
avec cette approche est que je navigue sur la page des paramètres, faites pivoter l'appareil, et il montre momentanément la page des paramètres corrects, avant de revenir à ma vue principale.
Je pense qu'il y a un problème de threading ici. Mais peut-être que toute mon approche est fausse. Quelqu'un peut-il suggérer une meilleure solution?
http://stackoverflow.com/questions/2496554/easiest-way-to-support-multiple-orientations-how-do-i-load-a-custom-nib-when-the –