百度所查到的鍵盤監聽大部分用的是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;
}];
}