Curva de animation de keyboard como Int

Estoy intentando get el UIAnimationCurve del keyboard, si existe. El código que estoy usando está a continuación:

if let kbCurve = userInfo[UIKeyboardAnimationCurveUserInfoKey] as? Int{ animateCurve = UIViewAnimationCurve. } 

Sin embargo, animateCurve, al ser un UIViewAnimationCurve, no se puede convertir de un Int. ¿Cómo obtengo la curva de esta manera?

Si los trato como numbers, no las enumeraciones UIViewAnimationCurve, los siguientes errores al intentar animar:

 //Animated done button with keyboard origDoneFrame = btnDone.frame btnDone.hidden = false UIView.animateWithDuration( animateDuration, delay: Numbers.ANIMATE_DELAY, options: nil, animations: { UIView.setAnimationCurve(animateCurve) self.btnDone.frame = CGRectMake(self.btnDone.frame.origin.x + kbHeight, self.btnDone.frame.origin.y, self.btnDone.frame.size.width, self.btnDone.frame.size.height) return Void() }, completion: {finished in return Void() } ) 

¿Hay alguna manera de configurar la curva usando un int?

Intento de la curva con:

 UIView.animateWithDuration( animateDuration, delay: Numbers.ANIMATE_DELAY, options: UIViewAnimationOptions(animateCurve << 16), animations: { self.btnDone.frame = CGRectMake(self.btnDone.frame.origin.x + kbHeight, self.btnDone.frame.origin.y, self.btnDone.frame.size.width, self.btnDone.frame.size.height) return Void() }, completion: {finished in return Void() } ) 

Pero el error de compilation se produce debido a que UIViewAnimationOptions no es del tipo correcto. Si ejecuto la asignación de UIViewAnimationOptions por sí misma, obtengo el error del comstackdor "No se pudo encontrar una sobrecarga para 'init' que acepte los arguments suministrados".

Puede get un valor de enumeración del valor de Int procesar con

 animateCurve = UIViewAnimationCurve(rawValue: kbCurve) 

Sin embargo, el keyboard estándar utiliza un valor de curva de animation de 7, que puede no coincidir con un valor de enumeración, por lo que animateCurve sería nil . Si este es el caso, simplemente defina animateCurve como Int y use los valores en bruto en su código en lugar de los valores enum.

Además, una rápida búsqueda en Google encontró este contenedor, que puede ser útil para usted: https://gist.github.com/kristopherjohnson/13d5f18b0d56b0ea9242

Actualización para responder a la pregunta editada:

Puede usar un valor de curva de animation entera en las opciones de animation al convertirlo en un valor UIViewAnimationOptions :

 UIViewAnimationOptions(kbCurve << 16) // where kbCurve: UInt 

Actualización para Swift 1.2 (XCode 6.3):

Las notas de la versión para Swift 1.2 indican que los types NS_ENUM con valores no documentados ahora pueden convertirse de sus valores integers sin procesar sin restablecerse a cero. Entonces, el siguiente código funcionará:

 let animateCurve = UIViewAnimationCurve(rawValue: userInfo[UIKeyboardAnimationCurveUserInfoKey].integerValue)! 

Actualización para Swift 2.2 (XCode 7.3):

 if let animationCurveInt = (userInfo[UIKeyboardAnimationCurveUserInfoKey] as? NSNumber)?.unsignedIntegerValue { let animationCurve = UIViewAnimationOptions(rawValue: animationCurveInt<<16) ... } 

Debe usar una API anterior, no basada en bloques. Entonces podrá configurar la curva de animation, que obtendrá del object de notificación.