iOS/UIKit

[iOS] Transform을 이용해 KeyBoard 이벤트 처리

유훈 | Yuhun 2022. 3. 2. 02:36
반응형

키보드가 필요한 작업을 하려고 하니 TextField가 가려지는 현상이 발생했습니다. 아마 많은 분들이 같은 문제를 겪고 계실거라 생각되는데

한번 키보드 높이 만큼 textfield를 이동시켜 가려지지 않게 하고 키보드가 내려가면 다시 원래 위치로 돌아가는 이벤트를 처리해 보겠습니다.

 

 

1. 키보드 상승 및 하강을 보고 이벤트를 실행시키기 위해 옵저거 달기

 

먼저 저는 필요한 화면의 viewWillAppear에 선언해 주었습니다.

(메모리를 위해 viewWillDisappear에서 옵저버를 해제해 주셔야 합니다.)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // 키보드가 나올때 observing
    NotificationCenter.default.addObserver(self,
                               selector: #selector(self.keyboardShowNotification(notification:)),
                               name: UIResponder.keyboardWillShowNotification,
                               object: nil)

    // 키보드가 내려갈때 observing
    NotificationCenter.default.addObserver(self,
                               selector: #selector(self.keyboardHideNotification(notification:)),
                               name: UIResponder.keyboardWillHideNotification,
                               object: nil)
    }     
                                       
                                       
// 옵저버 제거                                  
override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        NotificationCenter.default.removeObserver(self)
    }

 

2. 키보드 상승 및 하강에 따른 이벤트 구현 (transform)

// 키보드 올라가는 이벤트
@objc func keyboardShowNotification(notification: NSNotification) {
	// 키보드 높이 계산
    if let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue {
		
        self."올릴View".transform = CGAffineTransform(translationX: 0, y: -keyboardSize.height)
    }
}

// 키보드 내려가는 이벤트
@objc func keyboardHideNotification(notification: NSNotification) {

    self."내릴View".transform = CGAffineTransform(translationX: 0, y: 0 )
}

이렇게 하면 생각보다 간단하게 키보드에 방해받지 않는 UI를 구성할 수 있었습니다.

 

 

 

TransForm

 

transform은 여러가지를 할당할 수 있는데 여기서는 CGAffineTransform(translationX: 0, y: 0 )를 사용했습니다.

이는 원하는 위치로 이동시키는 역할을 합니다.

다른 것에는 회전이나 넓이 조절 등이 있습니다.

 

transform

https://developer.apple.com/documentation/uikit/uiview/1622459-transform

CGAffineTransform

https://developer.apple.com/documentation/coregraphics/cgaffinetransform

 

반응형