如何将原始值7强制为UIViewAnimationCurve枚举?

时间:2014-08-06 19:17:27

标签: enums swift uiviewanimation uiviewanimation-curve

UIKeyboardAnimationCurveUserInfoKey的userInfo字典中的密钥UIKeyboardWillShowNotification包含Int,其值为7

现在我需要将此Int传递给UIView.setAnimationCurve(<here>)。我尝试像这样UIViewAnimationCurve(rawValue: 7)创建所需的UIViewAnimationCurve枚举。由于原始值7未记录,因此结果始终为nil

它在Objective-C中以这种方式运行良好。知道如何使用Swift将这个动画曲线从通知转换为UIView动画吗?


更新:正如Martin所指出的那样,自Xcode 6.3以来,这不再是一个问题。

来自Xcode 6.3 Release Notes

  

带有未记录值的导入的NS_ENUM类型(例如UIViewAnimationCurve)现在可以使用init(rawValue :)初始化程序从其原始整数值转换而不会重置为nil。可以编写使用unsafeBitCast作为此问题的变通方法的代码来使用原始值初始值设定项。

1 个答案:

答案 0 :(得分:6)

我想我已经明白了,但我不确定这是不是应该这样做的。

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


更新:此question中包含的解决方案也适用。

var animationCurve = UIViewAnimationCurve.EaseInOut
NSNumber(integer: 7).getValue(&animationCurve)