본문 바로가기

iOS

[Swift] Keyboard, Transform

반응형

PopUp으로 띄운 창에 글을 쓸 필요가 있었다.

하지만 키보드가 띄워진 순간 창을 가리거나 비율이 안맞는 등, 만족스럽지 못하였다.

 

따라서 키보드 레이아웃에 맞게 유동적으로 popup 창이 이동 되야할 필요가 있었다.

 

NotificationCenter 를 이용해 키보드 창을 탐색하고

키보드가 나타날시 StackView의 transform을 이용하여 이동시켰다.

 

아래의 addKeyboardNotification()을 viewDidLoad()에 넣어주면 된다.

 

private func addKeyboardNotification() {
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(keyboardWillShow),
        name: UIResponder.keyboardWillShowNotification,
        object: nil
    )

    NotificationCenter.default.addObserver(
        self,
        selector: #selector(keyboardWillHide),
        name: UIResponder.keyboardWillHideNotification,
        object: nil
    )
}

@objc private func keyboardWillShow(_ notification: Notification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keybaordRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keybaordRectangle.height
        // preparedView.frame.origin.y -= keyboardHeight

        containerView.transform = CGAffineTransform(translationX: 0, y: -keyboardHeight/2)
    }
}

@objc private func keyboardWillHide(_ notification: Notification) {
    if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue {
        let keybaordRectangle = keyboardFrame.cgRectValue
        let keyboardHeight = keybaordRectangle.height
        // preparedView.nextButton.frame.origin.y += keyboardHeight

        containerView.transform = CGAffineTransform(translationX: 0, y: keyboardHeight/2)
    }
}