How do I get the line below to compile?
UIView.setAnimationCurve(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)
Right now, it gives the compile error:
'NSNumber' is not a subtype of 'UIViewAnimationCurve'
Why does the compiler think userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue
is an NSNumber
when integerValue
is declared as an Int
?
class NSNumber : NSValue {
// ...
var integerValue: Int { get }`?
// ...
}
I've had similar issues with other enum types. What is the general solution?
UIView.setAnimationCurve(UIViewAnimationCurve.fromRaw(userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)!)
Read more: Swift enumerations & fromRaw()
Based on this answer to How to use the default iOS7 UIAnimation curve, I use the new block-based animation method, + animateWithDuration:delay:options:animations:completion:
, and get the UIViewAnimationOptions
like so:
let options = UIViewAnimationOptions(UInt((userInfo[UIKeyboardAnimationCurveUserInfoKey] as NSNumber).integerValue << 16))
I used the below code to construct an animation curve value from the user info dictionary:
let rawAnimationCurveValue = (userInfo[UIKeyboardAnimationCurveUserInfoKey] as NSNumber).unsignedIntegerValue
let keyboardAnimationCurve = UIViewAnimationCurve(rawValue: rawAnimationCurveValue)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With