如何在iOS 7上模仿键盘动画以添加“完成”按钮到数字键盘?
我一直在做这样的事情来模仿旧版iOS上的键盘动画。
I had been doing something like this to mimic the keyboard animation on older version of iOS.
CGRect keyboardBeginFrame;
[[note.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] getValue:&keyboardBeginFrame];
self.doneKeyboardButton.frame = CGRectMake(0, (keyboardBeginFrame.origin.y + keyboardBeginFrame.size.height) - 53, 106, 53);
[[[[UIApplication sharedApplication] windows] lastObject] addSubview:self.doneKeyboardButton];
CGPoint newCenter = CGPointMake(self.doneKeyboardButton.superview.frame.origin.x + self.doneKeyboardButton.frame.size.width/2,
self.doneKeyboardButton.superview.frame.size.height - self.doneKeyboardButton.frame.size.height/2);
[UIView animateWithDuration:[[note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]-.02
delay:.0
options:[[note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]
animations:^{
self.contentView.frame = CGRectOffset(self.contentView.frame, 0, -TextFieldViewMovement);
self.doneKeyboardButton.center = newCenter;
}
completion:nil];
然而,这已停止在iOS7上运行。看起来返回的值不再完全正确,完成按钮不再完全模仿键盘显示动画。
However, this has stopped working on iOS7. It seems like the values returned are no longer exactly correct, and the Done button no longer exactly mimics the Keyboard display animation.
在iOS 7中,键盘使用新的未记录的动画曲线。虽然有些人注意到使用未记录的动画选项值,我更喜欢使用以下内容:
In iOS 7, the keyboard uses a new, undocumented animation curve. While some have noted that using an undocumented value for the animation option works, I prefer to use the following:
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:[notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue]];
[UIView setAnimationCurve:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] unsignedIntegerValue]];
[UIView setAnimationBeginsFromCurrentState:YES];
// work
[UIView commitAnimations];
虽然建议使用基于块的动画,但键盘通知返回的动画曲线是 UIViewAnimationCurve
,而您需要传递给基于块的动画的选项是 UIViewAnimationOptions
。使用传统的UIView动画方法,您可以直接输入值。最重要的是,这将使用新的未记录的动画曲线(整数值为7)并使动画与键盘匹配。并且,它在iOS 6和7上也能正常工作。
While block based animations are the recommendation, the animation curve returned from the keyboard notification is an UIViewAnimationCurve
, while the option you would need to pass to block based animations is an UIViewAnimationOptions
. Using the traditional UIView animation methods allows you to pipe the value directly in. Most importantly, this will use the new undocumented animation curve (integer value of 7) and cause the animation to match the keyboard. And, it will work just as well on iOS 6 and 7.