UIKeyboardWillChangeFrameNotification UIViewAnimationCurve configurado en 7 en iOS 7

Estoy buscando determinar cómo se animará el keyboard. En iOS 6 obtengo un valor válido para UIKeyboardAnimationCurveUserInfoKey (que debería ser un UIViewAnimationCurve con un valor de 0-3) pero la function devuelve un valor de 7. ¿Cómo funciona el keyboard animate adentro ¿Qué se puede hacer con el valor de 7?

 NSConcreteNotification 0xc472900 {name = UIKeyboardWillChangeFrameNotification; userInfo = { UIKeyboardAnimationCurveUserInfoKey = 7; UIKeyboardAnimationDurationUserInfoKey = "0.25"; UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 216}}"; UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 588}"; UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 372}"; UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 480}, {320, 216}}"; UIKeyboardFrameChangedByUserInteraction = 0; UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 264}, {320, 216}}"; }} 

Parece que el keyboard está usando una curva de animation indocumentada / desconocida.

Pero aún puedes usarlo. Para convertirlo a UIViewAnimationOptions para animaciones de bloques, cambie por 16 bits como para

 UIViewAnimationCurve keyboardTransitionAnimationCurve; [[notification.userInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&keyboardTransitionAnimationCurve]; keyboardTransitionAnimationCurve |= keyboardTransitionAnimationCurve<<16; [UIView animateWithDuration:0.5 delay:0.0 options:keyboardTransitionAnimationCurve animations:^{ // ... do stuff here } completion:NULL]; 

O simplemente pasarlo como una curva de animation.

 UIViewAnimationCurve keyboardTransitionAnimationCurve; [[notification.userInfo valueForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&keyboardTransitionAnimationCurve]; [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationCurve:keyboardTransitionAnimationCurve]; // ... do stuff here [UIView commitAnimations]; 

No puedo comentar desafortunadamente de lo contrario lo haría en lugar de ingresar una nueva respuesta.

También puedes usar:

animationOptions | = animationCurve << 16;

Esto puede ser preferible ya que conservará operaciones OR = anteriores en las opciones de animation.