首先是效果圖:

實(shí)現(xiàn)原理:
// 注冊(cè)鍵盤的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
- (void)keyboardWillChangeFrame:(NSNotification*)note{
//設(shè)置窗口的顏色
self.view.window.backgroundColor = self.view.backgroundColor;
// 取出鍵盤動(dòng)畫的時(shí)間
CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
// 取得鍵盤最后的frame
CGRect keyboardFrame = [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
// 計(jì)算控制器的view需要平移的距離
CGFloat transformY = keyboardFrame.origin.y - self.view.frame.size.height;
// 執(zhí)行動(dòng)畫
[UIView animateWithDuration:duration animations:^{
self.view.transform = CGAffineTransformMakeTranslation(0, transformY);
}];
}
// 點(diǎn)擊view收起鍵盤
- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
[self.view endEditing:YES];
}
// 最后別忘了在銷毀控制器的時(shí)候刪除通知
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}