アニメーション処理を書いてないにもかかわらず、キーボードに合わせてアニメーションするのは何故ですか?
ストーリーボードに素朴にUITextViewを置いています。
import UIKit
class ViewController: UIViewController, UITextViewDelegate {
@IBOutlet weak var hogeTextView: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
self.hogeTextView.delegate = self
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange), name: UIResponder.keyboardWillChangeFrameNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil)
}
@objc func keyboardWillChange(notification: NSNotification) {
guard let keyboardSize = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect else { return }
self.view.frame.origin.y = UIScreen.main.bounds.origin.y - keyboardSize.height
}
@objc func keyboardWillHide(notification: NSNotification) {
guard self.view.frame.origin.y != 0 else { return }
self.view.frame.origin.y = 0
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if (text == "\n") {
hogeTextView.resignFirstResponder()
return false
}
return true
}
}
上記コードについてです。
self.view.frame.origin.y = UIScreen.main.bounds.origin.y - keyboardSize.height
の部分と
self.view.frame.origin.y = 0
についてアニメーション処理を入れていないにもかかわらず、キーボードがせり上がってくる速度と同じ速度で、UITextView
がアニメーション付きでせり上がります(厳密にはせり上がっているのは self.view
)。何故でしょうか?