- (void)viewDidLoad { [super viewDidLoad]; //注册观察键盘的变化 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(transformView:) name:UIKeyboardWillChangeFrameNotification object:nil]; } //键盘回收 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { for(UIView *view in self.view.subviews) { [view resignFirstResponder]; } } //移动UIView -(void)transformView:(NSNotification *)aNSNotification { //获取键盘弹出前的Rect NSValue *keyBoardBeginBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameBeginUserInfoKey]; CGRect beginRect=[keyBoardBeginBounds CGRectValue]; //获取键盘弹出后的Rect NSValue *keyBoardEndBounds=[[aNSNotification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey]; CGRect endRect=[keyBoardEndBounds CGRectValue]; //获取键盘位置变化先后纵坐标Y的变化值 CGFloat deltaY=endRect.origin.y - beginRect.origin.y; NSLog(@"看看这个变化的Y值:%f",deltaY); //在0.25s内完成self.view的Frame的变化,等因而给self.view添加一个向上移动deltaY的动画 [UIView animateWithDuration:0.25f animations:^{ [self.view setFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y+deltaY, self.view.frame.size.width, self.view.frame.size.height)]; }]; }