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을 사용해 원 위치로 돌아오도록 합니다.