IT虾米网

iOS 监听键盘详解

itxm 2018年06月23日 手机开发 330 0

百度所查到的键盘监听大部分用的是

UIKeyboardDidShowNotification//已经显示

UIKeyboardDidHideNotification//已经隐藏

然后我自己去试一直觉得一些空间跟随键盘的移动是有时间间隔的  一直想不明白他们是怎么实现的  求大神告知  所以自己看源码发现还有

UIKeyboardWillShowNotification//将要显示

UIKeyboardDidHideNotification//将要隐藏

这样是能完美的解决问题的  至少在我自己的项目需求中是可以的

最后别忘记在控制器消失中移除观察者哦


- (void) registerForKeyboardNotifications{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];

    [[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;

    }];

}


发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

iOS 动画退出应用代码详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。