Dear random Apple UIKit engineer. This is a question for you. Today let's speak about keyboard notifications. In particular, UIResponder.keyboardWillShowNotification
and UIResponder.keyboardWillHideNotification
.
While working with those, I noticed some undocumented behaviour.
First, let me give you some context:
extension UIViewController {
func registerForKeyboardNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(keyboardNotification), name: UIResponder.keyboardWillShowNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardNotification), name: UIResponder.keyboardWillHideNotification, object: nil)
}
/// Override this method to handle keyboard notifications.
@objc func keyboardNotification(_ notification: Notification) { ... }
}
Eventually, I found that latter method with 3 dots has an implicit animation inside it's scope. Here is the [proof.](https://medium.com /uptech-team/why-does-uiresponder-keyboard-notification-handler-animate-10cc96bce372)
Another thing I noticed, is that this property definition is perfectly valid let curve = UIView.AnimationCurve(rawValue: 7)!
. The 7 btw comes from UIResponder.keyboardAnimationCurveUserInfoKey
as a default value during my tests. So, the enum with 4 possible values (0...3) can be initialized with a value out of enum's cases range. Also, how can I initialize UIView.AnimationOption from 7? I will pollute my OptionSet which I feed to options
parameter on UIView.animate(...)
My questions:
- Why implicit animation is not documented and can I trust it or it's a subject to change.
- Why
UIView.AnimationCurve(rawValue: 7)!
does not crash. - How can I convert
UIResponder.keyboardAnimationCurveUserInfoKey
's value intoUIView.AnimationOption
properly if I don't want to use implicit value.
I don't encroach on UIKit secrets. I just need to know how to work with the API.
Thank you!