Skip to content

Comment imiter l’animation du clavier sur iOS 7 pour ajouter le bouton “Terminé” au clavier numérique ?

Solution:

Dans iOS 7, le clavier utilise une nouvelle courbe d’animation non documentée. Alors que certains ont noté que l’utilisation d’une valeur non documentée pour l’option d’animation fonctionne, je préfère utiliser ce qui suit :

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
[UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] unsignedIntegerValue]];
[UIView setAnimationBeginsFromCurrentState:YES];

// work

[UIView commitAnimations];

Alors que les animations basées sur des blocs sont la recommandation, la courbe d’animation renvoyée par la notification du clavier est une UIViewAnimationCurve, alors que l’option que vous devez passer aux animations basées sur des blocs est un UIViewAnimationOptions. L’utilisation des méthodes d’animation traditionnelles d’UIView vous permet de diriger la valeur directement. Plus important encore, cela utilisera la nouvelle courbe d’animation non documentée (valeur entière de 7) et fera correspondre l’animation au clavier. Et, cela fonctionnera aussi bien sur iOS 6 et 7.

J’ai eu le même problème et j’ai réussi à faire fonctionner l’animation avec les paramètres suivants pour iOS 7 :

    [UIView animateWithDuration:0.5
                          delay:0
         usingSpringWithDamping:500.0f
          initialSpringVelocity:0.0f
                        options:UIViewAnimationOptionCurveLinear
                     animations:animBlock
                     completion:completionBlock];

ÉDITER: ces valeurs ont été obtenues via le débogage, et pouvez changer avec les nouvelles versions d’iOS. La réponse de @DavidBeck fonctionne pour moi dans iOS 7 également, donc je la lie ici.

Apple utilise une animation non documentée avec la valeur 7 dans iOS 7.

Cependant, la déclaration de UIViewAnimationCurve définit les valeurs de 0 à 3

typedef enum {
   UIViewAnimationCurveEaseInOut, // 0
   UIViewAnimationCurveEaseIn,
   UIViewAnimationCurveEaseOut,
   UIViewAnimationCurveLinear // 3
} UIViewAnimationCurve;

Les UIViewAnimationOptions dont vous avez besoin pour les animations basées sur des blocs est défini comme

enum {
   // ...
   UIViewAnimationOptionCurveEaseInOut            = 0 << 16,
   UIViewAnimationOptionCurveEaseIn               = 1 << 16,
   UIViewAnimationOptionCurveEaseOut              = 2 << 16,
   UIViewAnimationOptionCurveLinear               = 3 << 16,

   UIViewAnimationOptionTransitionNone            = 0 << 20,
   // ...
};

Il semble qu’Apple réserve 4 bits pour la courbe d’animation (20 – 16 = 4) qui autorise des valeurs de 0 à 15 (il y a donc probablement plus de valeurs non documentées).

Avec cette connaissance, vous pouvez simplement transformer un UIViewAnimationCurve dans UIViewAnimationOptions en le décalant d’environ 16 bits. Dans votre exemple, cela signifie :

options:[[note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue] << 16



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.