je veux détecter un processus de rotation sur ipad par programme. Dans ce cas, je souhaite définir un booléen sur oui, lorsque la rotation commencera, et la définir sur false après la fin de la rotation. Y at-il une méthode qui a appelé quand la rotation va commencer et la rotation a pris fin?
De Apple Docs:
Envoyé au contrôleur de vue juste avant que l'interface utilisateur ne commence à tourner.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
Envoyé au contrôleur de vue après la rotation de l'interface utilisateur:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
Voir plus ici: Référence de classe UIViewController -> Répondre aux événements de rotation de vue
ATTENTION: Ceci est déconseillé, voir cet article
Pour les nouveaux venus à ce poste, les méthodes suggérées par Nekto sont devenues obsolètes dans iOS 8. Apple suggère d'utiliser:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
Vous pouvez utiliser le paramètre "taille" comme un moyen facile de savoir s'il passe en mode portrait ou paysage.
c'est à dire.
if (size.width > size.height)
{
// Position elements for Landscape
}
else
{
// Position elements for Portrait
}
Plus d'informations sont disponibles dans le Docs .
Toutes les méthodes ci-dessus (dans la réponse de @Nekto) sont obsolètes dans iOS8.0 et les versions ultérieures. Source: Bibliothèque de développement iOS
Depuis iOS 8, toutes les méthodes liées à la rotation sont obsolètes . Au lieu de cela, les rotations Sont traitées comme une modification de la taille de la vue Du contrôleur de vue et sont donc signalées à l'aide de la méthode ViewWillTransitionToSize: withTransitionCoordinator:. Lorsque l'orientation de l'interface Change, UIKit appelle cette méthode sur le contrôleur de vue racine de De la fenêtre. Ce contrôleur de vue informe ensuite ses contrôleurs de vue enfants , En propageant le message dans la hiérarchie du contrôleur de vue .
Dans iOS8 ou version ultérieure, vous pouvez utiliser la méthode ci-dessous.
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
{
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Stuff you used to do in willRotateToInterfaceOrientation would go here.
// If you don't need anything special, you can set this block to nil.
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context) {
// Stuff you used to do in didRotateFromInterfaceOrientation would go here.
// If not needed, set to nil.
}];
}
Dans le protocole UISplitViewController, la nouvelle méthode pour iOS8 est
- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode
Il y a quatre modes d'affichage:
typedef enum UISplitViewControllerDisplayMode : NSInteger {
UISplitViewControllerDisplayModeAutomatic,
UISplitViewControllerDisplayModePrimaryHidden,
UISplitViewControllerDisplayModeAllVisible,
UISplitViewControllerDisplayModePrimaryOverlay,
} UISplitViewControllerDisplayMode;
MAIScette méthode seraJAMAISretournera Automatique.