simular una animation elástica con UIPangestureRecognizer

Estoy intentando usar UIPangestureRecognizer para simular un efecto "elástico". Me gustaría arrastrar una UIView a su alnetworkingedor pero debería aparecer anclada en un punto específico de su supervisión.

Intenté con este código, disminuyendo el offset con un multiplicador, pero es lineal y el efecto no es lo que estoy buscando.

 float percentage = distance / maxDistance; float multiplier = (1 - percentage) ; CGPoint center = { self.targetView.center.x , self.targetView.center.y + translation.y * multiplier}; [self.targetView setCenter:center]; [recognizer setTranslation:CGPointZero inView:self.view]; 

Encontré este repository https://github.com/warrenm/AHEasing , pero no entiendo cómo puedo usar ExponentialEaseOut .

De hecho, encontré una solución realmente simple a esto. No estoy seguro de por qué necesitas una biblioteca de terceros aquí, y en general, tiendo a evitar incorporarlas si no es necesario.

Tu amigo aquí es la function tangente hiperbólica (tanh). Cruza el eje x a 45 grados y luego golpea una asíntota en 1 justo después del valor de input de 2.

Utilicé esto para implementar el desplazamiento horizontal para revelar la date / hora (similar a cómo se hace en los posts de iOS7). Use este código en handlePan:

 frameOffset = -OFFSET_MAX * tanh(translation.x / INPUT_SENSITIVITY); 

Juega con OFFSET_MAX y INPUT_SENSITIVITY para sintonizarlo para tus propósitos. Uso 80.0f para OFFSET_MAX (distancia máxima que quiero que pase el slider para mover la vista) y 150.0f para INPUT_SENSITIVITY.

En cuanto a la animation del UIView animateWithDuration final, puede usar el campo de opciones de UIView animateWithDuration para configurar la curva de animation correcta. Durante la duración, puede usar una duración fija (p. Ej., 0.15 segundos) o escalar ese valor en function de la pre-devolución de compensación total. Dado que las personas esperan un "retorno rápido" más rápido para un desplazamiento mayor, he descubierto que el uso de una duración fija se verá bastante bueno en general.

Después de una tarde entera (no soy tan buena en matemáticas) encontré una solución para este problema.

He normalizado la distancia entre la vista y mi punto de anclaje y he utilizado una function básica para llevar este valor a cero de una forma no lineal. Esta es la function que he usado.

facilidad de funcionamiento

Cuando el usuario levanta el dedo, recupero la vista utilizando el marco pop de Facebook, para simular una animation de spring de fantasía.

introduzca la descripción de la imagen aquí