web-dev-qa-db-fra.com

quelle méthode sera appelée lorsque nous commençons à faire pivoter l'appareil et après avoir terminé

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?

23
R. Dewi

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

36
Nekto

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 .

27
wyzkid207

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.

    }];
}
18
Utsav Dusad

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.

0
mtet88