ios

[ios - Swift] 키보드 사용시 뷰 올리기

POKY_0908 2020. 11. 26. 10:27

 

 

이번 글에서는 키보드 사용 시 키보드에 화면이 가려지지 않도록 UIView를 애니메이션을 사용해 올려보도록 하겠습니다. 

 

우선 기본 키보드가 올라가거나 내려가는 것을 알아야 애니메이션을 사용할 수 있으니 옵져버를 등록하겠습니다.

 

// 반드시 옵져버를 리무브 할것!
override func viewWillAppear(_ animated: Bool) {
    // 옵져버를 등록
    // 옵저버 대상 self
    // 옵져버 감지시 실행 함수
    // 옵져버가 감지할 것
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardUp), name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(keyboardDown), name: UIResponder.keyboardWillHideNotification, object: nil)
}
    

 

override func viewWillDisappear(_ animated: Bool) {
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillShowNotification, object: nil)
    NotificationCenter.default.removeObserver(self, name: UIResponder.keyboardWillHideNotification, object: nil)
}

 

뷰가 나타나고 사라질 때 옵져버를 등록, 해제시키도록 하고

 

키보드의 Show, Hide의 상태를 감지 시 Selector 함수를 호출시키도록 합니다.

 

 

@objc func keyboardUp(notification:NSNotification) {
    if let keyboardFrame:NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
       let keyboardRectangle = keyboardFrame.cgRectValue
   
        UIView.animate(
            withDuration: 0.3
            , animations: {
                self.view.transform = CGAffineTransform(translationX: 0, y: -keyboardRectangle.height)
            }
        )
    }
}

키보드가 올라올 때 뷰를 얼마나 올려야 하는지를 알기 위해서 키보드의 사이즈를 구하고 

 

CGAffineTransform으로 뷰를 키보드 높이만큼 위로 올려줬습니다.

 

 

 

@objc func keyboardDown() {
    self.view.transform = .identity
}

키보드 다운 시

CGAffineTransform을 사용하여 돌아오게 할 수도 있지만 좀 더 편한 방법으로 identity을 사용해 원 위치로 돌아오도록 합니다.