Pregunta

Tengo una aplicación con una UIView arrastrable colocada en la parte inferior. La vista arrastrable no está totalmente fuera de la pantalla y tiene una "pestaña Pull" que el usuario puede arrastrar hacia arriba o hacia abajo. Arrastrarse hacia arriba y hacia abajo actualmente funciona, pero me gustaría darle el mismo comportamiento que las notificaciones de Apple deslizan el cajón.

Por ejemplo, si arrasto la vista 50% hacia arriba y retiro mi dedo de la pantalla, entonces me gustaría que la vista arrastrable continúe avanzando hacia arriba por sí sola. Del mismo modo, si el usuario solo arrastró la vista, digamos 30% hacia arriba, entonces la vista debe volver a su posición predeterminada.

Idealmente, mientras puedo arrastrar hacia arriba/hacia abajo, el movimiento no es muy "orgánico" ...

En este momento, estoy logrando el arrastre hacia arriba y hacia abajo a través de UipangestureRecognizer, en caso de que sea relevante para la pregunta.

¿Es quizás algo en la línea de algunas matemáticas inteligentes con la posición Y de la vista arrastrable, luego haciendo el resto del movimiento con algunas caanimaciones?

Puede ser un poco difícil de visualizar, así que he agregado algunas pantallas a continuación.

Pantalla predeterminada con la vista A en la parte inferior

La vista se arrastra hacia arriba a través de la pestaña a la derecha

¡Gracias!

¿Fue útil?

Solución

Cuando tu UIPanGestureRecognizerEl estado se convierte en UIGestureRecognizerStateEnded, utilizar el velocityInView: mensaje para encontrar la velocidad del gesto.

Si la velocidad está cerca de cero, abra o cierre la vista en función de la posición de la vista y el estado anterior de la vista. Por ejemplo, si la vista se cerró y se ha sacado más del 10%, abréralo. Si estaba abierto y se ha retirado en más del 10%, cierre. De lo contrario, muévalo de regreso a su posición previa a la gestación.

Si la velocidad no está cerca de cero, use el signo del componente Y para determinar el nuevo estado de la vista. Si el signo es positivo, cierre la vista. Si el signo es negativo, abra la vista.

Tendrá que experimentar para descubrir exactamente qué definición de "cerca de cero" se siente mejor.

En cualquier caso, querrá animar la vista a su posición final después de que termine el gesto, usando una corta duración (probablemente entre .1 y .25 segundos). Es posible que desee elegir la duración en función de la velocidad y la distancia que debe viajar la vista. El panel de notificaciones del sistema hace esto. (Intente arrastrarlo hacia abajo lentamente frente a rápidamente. Se anima a su posición final a diferentes velocidades dependiendo de qué tan rápido lo arrastrara cuando lo soltara).

Querrás experimentar para encontrar la mejor curva de animación (UIViewAnimationOptionCurveEaseOut, etc.), y es posible que desee usar una curva diferente dependiendo de si está abriendo o cerrando la vista y la velocidad del gesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top