web-dev-qa-db-fra.com

Quel est le taux d'animation de clavier par défaut de l'iPhone?

Il y a quelque temps, je me souviens d'avoir vu une constante quelconque qui définissait le taux d'animation du clavier sur l'iPhone et je ne me souviens plus de l'endroit où je l'ai vue… avez-vous un aperçu?

33
ShortCircuit
- (NSTimeInterval)keyboardAnimationDurationForNotification:(NSNotification*)notification
{
    NSDictionary* info = [notification userInfo];
    NSValue* value = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval duration = 0;
    [value getValue:&duration];
    return duration;
}
67
Shaggy Frog

UIKeyboardAnimationDurationUserInfoKey est maintenant un objet NSNumber, ce qui raccourcit le code.

- (void)keyboardWillShowNotification:(NSNotification *)notification
{
    NSDictionary *info = [notification userInfo];
    NSNumber *number = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    double duration = [number doubleValue];
} 
16
Zhengming Ying

Comme il s’agit du premier hit de Google, je voudrais souligner que la codification en dur 0.3 signifie que votre vue s’animera de manière incorrecte lorsque des utilisateurs internationaux (par exemple en japonais) basculeront entre des claviers de tailles différentes (lorsque cette action doit être instantanée). .

Toujours utiliser la valeur UIKeyboardAnimationDurationUserInfoKey du dictionnaire userInfo de la notification - elle est définie sur 0 lorsque l'utilisateur fait défiler les claviers.

11
greenlight

Pour ajouter un peu plus à ce que Shaggy Frog a écrit. La mise en œuvre complète serait quelque chose comme:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardMovement:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardMovement:)
                                             name:UIKeyboardWillHideNotification
                                           object:nil];


-(void)keyboardMovement:(NSNotification *)notification{
    if (_numericKeyboardShowing == false){
        [UIView animateWithDuration:[self keyboardAnimationDurationForNotification:notification] delay:0
                        options:UIViewAnimationCurveEaseInOut
                     animations:^ {
                         self.bottomContainerView.center = CGPointMake(self.bottomContainerView.center.x, (self.bottomContainerView.center.y - 218));
                                  }
                     completion:NULL];

    _numericKeyboardShowing = true;
   }
   else{
    [UIView animateWithDuration:[self keyboardAnimationDurationForNotification:notification] delay:0
                        options:UIViewAnimationCurveLinear
                     animations:^ {
                         self.bottomContainerView.center = CGPointMake(self.bottomContainerView.center.x, (self.bottomContainerView.center.y + 218));
                     }
                     completion:NULL];

    _numericKeyboardShowing = false;
}

- (NSTimeInterval)keyboardAnimationDurationForNotification:(NSNotification *)notification
{
    NSDictionary *info      = [notification userInfo];
    NSValue* value          = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
    NSTimeInterval duration = 0;
    [value getValue:&duration];
    return duration;
}
6
Ben Coffman

Dans Swift, votre code ressemblera à ceci:

let keyboardSize: CGSize = userInfo[UIKeyboardFrameBeginUserInfoKey]!.CGRectValue.size

let animationDuration = ((userInfo[UIKeyboardAnimationDurationUserInfoKey]) as! NSNumber).floatValue
let animationOptions = ((userInfo[UIKeyboardAnimationCurveUserInfoKey]) as! NSNumber).unsignedLongValue

UIView.animateWithDuration(NSTimeInterval(animationDuration), delay: 0,
  options: UIViewAnimationOptions(rawValue: animationOptions),
  animations: { () -> Void in
                self.view.frame.Origin.y += keyboardSize.height
                }, 
  completion: nil)
2
codingFriend1

UIKeyboardAnimationDurationUserInfoKey Clé d'un objet NSValue contenant un double qui identifie la durée de l'animation en secondes.

2
ennuikiller

Swift 4 - a travaillé pour moi:

        if let duration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double {
            UIView.animate(withDuration: duration, animations: {
                self.view.layoutIfNeeded()
            })
        }

En mode débogage ma duration était 3.499999 

0
kuzdu