百度所查到的键盘监听大部分用的是ide
UIKeyboardDidShowNotification//已经显示动画
UIKeyboardDidHideNotification//已经隐藏spa
而后我本身去试一直以为一些空间跟随键盘的移动是有时间间隔的 一直想不明白他们是怎么实现的 求大神告知 因此本身看源码发现还有3d
UIKeyboardWillShowNotification//将要显示orm
UIKeyboardDidHideNotification//将要隐藏server
这样是能完美的解决问题的 至少在我本身的项目需求中是能够的get
最后别忘记在控制器消失中移除观察者哦animation
- (void) registerForKeyboardNotifications{源码
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];it
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardWillHideNotification object:nil];
}
//键盘显示注册通知
- (void) keyboardWasShown:(NSNotification *) note{
// 获取位置和大小
CGRect keyboardBounds;
[[note.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue: &keyboardBounds];
NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
keyboardBounds = [self.view convertRect:keyboardBounds toView:nil];
// 获取位置和大小
CGRect containerFrame = _menuView.frame;
// 计算出y坐标
containerFrame.origin.y = self.view.bounds.size.height - (keyboardBounds.size.height + containerFrame.size.height);
_mnueHeight = containerFrame.origin.y;
_maxHeight = containerFrame.origin.y;
// 动画改变位置
[UIView animateWithDuration:[duration doubleValue] animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.1];
[UIView setAnimationCurve:[curve intValue]];
// 更改位置
_menuView.frame = containerFrame;
}];
}
//键盘消失通知
- (void) keyboardWasHidden:(NSNotification *) note{
NSNumber *duration = [note.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];
NSNumber *curve = [note.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey];
// 获取位置和大小
CGRect containerFrame = _menuView.frame;
containerFrame.origin.y = self.view.bounds.size.height - containerFrame.size.height;
// 动画改变位置
[UIView animateWithDuration:[duration doubleValue] animations:^{
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:[duration doubleValue]];
[UIView setAnimationCurve:[curve intValue]];
// 更改位置
_menuView.frame = containerFrame;
}];
}