iOS 7 - 键盘动画 [英] iOS 7 - Keyboard animation
问题描述
我正在尝试了解 iPhone 5 模拟器上 iOS 7.0 中的新键盘动画.我想在键盘出现时调整 UITableView
的大小,但我无法获得正确的动画细节.
当键盘出现或消失时,我正在使用 NSNotification
对象中的信息.
I'm trying to understand the new keyboard animation in iOS 7.0 on the iPhone 5 Simulator. I want to resize my UITableView
when the keyboard appears, but I can't get the right animation details.
I'm using the information from the NSNotification
object, when the keyboard appears or disappears.
这是我的日志:
Move keyboard from {{0, 920}, {320, 216}} to {{0, 352}, {320, 216}}
with duration: 0.400000
and animation curve: 7
UIViewAnimationCurveEaseInOut = 0
UIViewAnimationCurveEaseIn = 1
UIViewAnimationCurveEaseOut = 2
UIViewAnimationCurveLinear = 3
动画曲线是未知值,怎么办?
The animation curve is an unknown value, what should I do?
推荐答案
现在我找到了解决方案.动画从点 {0, 920}
开始到 {0, 352}
.问题是 UITableView
对象以 {160, 568}
的大小开始,所以我将 UITableView
的大小更改为 {160, 920}
在动画开始之前.
Now I found the solution. The animation starts from the point {0, 920}
to {0, 352}
. The problem was that the UITableView
object started with a size of {160, 568}
, so I changed the size of the UITableView
to {160, 920}
before the animation was started.
关于未知的动画曲线,我只是将参数设置为animationCurve <<<;16
将其从视图动画曲线转换为视图动画选项.
该值不等于linear、ease in、ease out和ease inout动画曲线.
Concerning to the unknown animation curve, I just set the parameter to animationCurve << 16
to convert it from a view animation curve to a view animation option.
The value is not equal to the linear, ease in, ease out and ease inout animation curve.
这是我的代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(_keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
和:
- (void)keyboardWillShow:(NSNotification *)aNotification {
NSDictionary *userInfo = aNotification.userInfo;
//
// Get keyboard size.
NSValue *beginFrameValue = userInfo[UIKeyboardFrameBeginUserInfoKey];
CGRect keyboardBeginFrame = [self.view convertRect:beginFrameValue.CGRectValue fromView:nil];
NSValue *endFrameValue = userInfo[UIKeyboardFrameEndUserInfoKey];
CGRect keyboardEndFrame = [self.view convertRect:endFrameValue.CGRectValue fromView:nil];
//
// Get keyboard animation.
NSNumber *durationValue = userInfo[UIKeyboardAnimationDurationUserInfoKey];
NSTimeInterval animationDuration = durationValue.doubleValue;
NSNumber *curveValue = userInfo[UIKeyboardAnimationCurveUserInfoKey];
UIViewAnimationCurve animationCurve = curveValue.intValue;
//
// Create animation.
CGRect tableViewFrame = self.tableView.frame;
bTableViewFrame.size.height = (keyboardBeginFrame.origin.y - tableViewFrame.origin.y);
self.tableView.frame = tableViewFrame;
void (^animations)() = ^() {
CGRect tableViewFrame = self.tableView.frame;
tableViewFrame.size.height = (keyboardEndFrame.origin.y - tableViewFrame.origin.y);
self.tableView.frame = tableViewFrame;
};
//
// Begin animation.
[UIView animateWithDuration:animationDuration
delay:0.0
options:(animationCurve << 16)
animations:animations
completion:nil];
}
这篇关于iOS 7 - 键盘动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!