14

The key UIKeyboardAnimationCurveUserInfoKey in the userInfo dictionary of a UIKeyboardWillShowNotification contains an Int with the value 7.

Now I need to pass this Int into UIView.setAnimationCurve(<here>). I tried to create the required UIViewAnimationCurve enum like this UIViewAnimationCurve(rawValue: 7). Because the raw value 7 is undocumented, the result is always nil.

It works fine this way in Objective-C. Any idea how to get this animation curve from the notification into a UIView animation using Swift?


Update: As pointed out by Martin, this is no longer a problem since Xcode 6.3.

From the Xcode 6.3 Release Notes:

Imported NS_ENUM types with undocumented values, such as UIViewAnimationCurve, can now be converted from their raw integer values using the init(rawValue:) initializer without being reset to nil. Code that used unsafeBitCast as a workaround for this issue can be written to use the raw value initializer.

Pranav Kasetti
  • 8,770
  • 2
  • 50
  • 71
Sebastian Kirsche
  • 861
  • 2
  • 19
  • 36
  • 1
    Note that this problem does not exist anymore in Swift 1.2, as documented in the Xcode 6.3 release notes. – Martin R Apr 10 '15 at 21:17

1 Answers1

9

I think I figured it out, but I'm not sure if this is the way it's supposed to be done.

let animationCurve = unsafeBitCast(7, UIViewAnimationCurve.self)
UIView.setAnimationCurve(animationCurve)


Update: The solution contained in this question works as well.

var animationCurve = UIViewAnimationCurve.EaseInOut
NSNumber(integer: 7).getValue(&animationCurve)
Community
  • 1
  • 1
Sebastian Kirsche
  • 861
  • 2
  • 19
  • 36