A while ago I remember seeing a constant of some kind that defined the animation rate of the Keyboard on the iPhone and I can not for the life of me remember where I saw it....any insight?
-
8The keyboard style and rotation behavior was changed between 2.2.1 and 3.0; who's to say they won't change the animation rate in later versions? – rpetrich Sep 15 '09 at 21:14
-
An even better answer to this can be found at http://stackoverflow.com/a/19235995/39946 It provides the correct duration and correct animtation curve. – Lena Schimmel Dec 06 '13 at 13:39
7 Answers
- (NSTimeInterval)keyboardAnimationDurationForNotification:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
NSValue* value = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval duration = 0;
[value getValue:&duration];
return duration;
}

- 27,575
- 16
- 91
- 128
-
1If you came here looking for MonoTouch answer, look no further than `e.AnimationDuration`. – Dan Abramov Aug 27 '13 at 20:12
-
4Note that to be precise, you should also adjust for the other animation keys, like `UIKeyboardAnimationCurveUserInfoKey`. – Rick Nov 26 '13 at 23:16
-
-
-
@Dan, what handler are you using? The handler I'm using takes a single argument, NSNotification. – William Grand Apr 18 '14 at 16:47
UIKeyboardAnimationDurationUserInfoKey now is a NSNumber object, that makes the code shorter.
- (void)keyboardWillShowNotification:(NSNotification *)notification
{
NSDictionary *info = [notification userInfo];
NSNumber *number = [info objectForKey:UIKeyboardAnimationDurationUserInfoKey];
double duration = [number doubleValue];
}

- 447
- 4
- 6
-
One-liner: `double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];` – Islam Aug 05 '15 at 06:26
Since this is the first google hit, I'd like to point out that hard-coding 0.3 will mean that your view will incorrectly animate when international users (e.g. Japanese) swap between different-sized keyboards (when that action ought to be instant).
Always use the notification's userInfo dictionary's UIKeyboardAnimationDurationUserInfoKey value - it gets set to 0 when the user is flicking through keyboards.

- 121
- 1
- 3
-
3NB: at the time of writing (iOS 5.1.1) the default duration is now 0.25s. So like @greenlight says, don't ever hard code this - use the data from the notification's userInfo dictionary. – Simon Whitaker May 24 '12 at 13:56
To add a bit more to what Shaggy Frog wrote. The full implementation would be something like:
[[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;
}

- 1,750
- 1
- 18
- 26
UIKeyboardAnimationDurationUserInfoKey The key for an NSValue object containing a double that identifies the duration of the animation in seconds.

- 46,381
- 14
- 112
- 137
-
Hey mate, is the key UIKeyboardAnimationDurationUserInfoKey in the user info dictionary of the notification???? -thx – ShortCircuit Sep 14 '09 at 04:21
In Swift your code will look like this:
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)

- 6,487
- 6
- 45
- 67
Swift 4 - worked for me:
if let duration = notification.userInfo?[UIKeyboardAnimationDurationUserInfoKey] as? Double {
UIView.animate(withDuration: duration, animations: {
self.view.layoutIfNeeded()
})
}
In debug mode my duration
was 3.499999

- 7,124
- 1
- 51
- 69