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;

    }];

}

相關文章
相關標籤/搜索