IOS8下利用自动布局实现键盘的弹出效果

简介: IOS8下利用自动布局实现键盘的弹出效果
-(void)keyboardChange:(NSNotification*)notice
{
    NSValue *value = [[notice userInfo] objectForKey:@"UIKeyboardFrameEndUserInfoKey"];
    float keyEnd_y = [value CGRectValue].origin.y;
    float animationDuration = [[notice userInfo][@"UIKeyboardAnimationDurationUserInfoKey"] floatValue];
    CGRect frame = [[UIScreen mainScreen]bounds];//屏幕尺寸
    int SCREEN_WIDTH = frame.size.width;
    int SCREEN_HEIGHT = frame.size.height;
    if(!shouldResignFirstResponder){
        UIView *alphaCoverView = [[[UIApplication sharedApplication].delegate window] viewWithTag:10001];
        if (!alphaCoverView) {
            alphaCoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, keyEnd_y - 40)];
            [alphaCoverView setBackgroundColor:[UIColor blackColor]];
            alphaCoverView.alpha = 0.0;
            alphaCoverView.tag = 10001;
            UITapGestureRecognizer *tapToResignirstResponder = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(textFielfWillResignFirstResponder)];
            [alphaCoverView addGestureRecognizer:tapToResignirstResponder];
            [[[UIApplication sharedApplication].delegate window] addSubview:alphaCoverView];
        }
        [UIView animateWithDuration:animationDuration animations:^{
            alphaCoverView.alpha = 0.4;
            alphaCoverView.frame = CGRectMake(0, 0, SCREEN_WIDTH, keyEnd_y - 40);//40是编辑框视图的高
        }];
    }
    float constant = 0.0;
    if (shouldResignFirstResponder) {
        //收回键盘时,将约束的值复原
        constant = SCREEN_HEIGHT - keyEnd_y;
        [UIView animateWithDuration:animationDuration animations:^{
            _m_spaceToBottom.constant = constant;
            [self.view layoutIfNeeded];
        }];
        shouldResignFirstResponder = NO;
    }else{
        constant = SCREEN_HEIGHT - keyEnd_y-46;//46是编辑框距离屏幕底部的距离
        [UIView animateWithDuration:animationDuration animations:^{
            _m_spaceToBottom.constant = constant;
            [self.view layoutIfNeeded];
        }];
    }
}
- (void)textFielfWillResignFirstResponder{
    UIView *view = [[[UIApplication sharedApplication].delegate window] viewWithTag:10001];
    [view removeFromSuperview];
    shouldResignFirstResponder = YES;
    [self.view endEditing:YES];
}
//键盘变化监听
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardChange:) name:@"UIKeyboardWillChangeFrameNotification" object:nil];

借鉴文章:

http://blog.csdn.net/u013016828/article/details/42102411

相关文章
|
6月前
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
165 2
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash
|
4月前
|
iOS开发 开发者
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
iOS 16 系统键盘修复问题之汇编层面模拟两次返回操作的实现如何解决
|
4月前
|
存储 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类对_lock的加锁和解锁操作如何解决
|
4月前
|
编译器 C语言 iOS开发
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
iOS 16 系统键盘修复问题之确定_lock是否用于保护对_deferredTasks的多线程读写如何解决
|
4月前
|
存储 安全 iOS开发
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决
iOS 16 系统键盘修复问题之确定UIKeyboardTaskQueue类中对_lock的使用是否正确如何解决
|
iOS开发
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash(下)
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash(下)
468 1
|
7月前
|
iOS开发
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
解决使用document.activeElement.blur()禁止弹出手机默认键盘ios版本17以上会出现闪屏问题
80 2
|
存储 安全 编译器
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash(上)
我给 iOS 系统打了个补丁——修复 iOS 16 系统键盘重大 Crash(上)
393 0
vue--ios手机input点击手机输入键盘顶起页面解决方案
vue--ios手机input点击手机输入键盘顶起页面解决方案
|
iOS开发
iOS跟随键盘走动的工具栏
iOS跟随键盘走动的工具栏
310 0
iOS跟随键盘走动的工具栏