iOS 监听键盘

百度所查到的键盘监听大部分用的是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;

    }];

}

相关文章
相关标签/搜索