ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ios - Swift] 키보드 사용시 뷰 올리기
    ios 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을 사용해 원 위치로 돌아오도록 합니다. 

     

     

    댓글

Designed by Tistory.