iPhone agrega inercia / impulso físico para animar "rueda de la fortuna" como control giratorio

Estoy tratando de crear un nuevo tipo de control giratorio con la apariencia de una verdadera rueda masiva apoyada en un pasador, capaz de girar alnetworkingedor de su punto central con un cierto grado de amortiguación, lo que finalmente hará que la rueda se detenga . Piensa en "rueda de la fortuna".

Ejemplo de control giratorio

Proyecto de muestra de control rotativo

Al trabajar con UITableView y / o UIScrollView nativos, pueden "chasquearse" en una dirección y continuar desplazándose en esa dirección por un time. Sé que se puede lograr un efecto similar con la curva de animation.

Lo que me interesa es cómo calcular cuánto debe desplazarse / girar el elemento de la interfaz en function de la distancia / velocidad con la que viajaba el dedo. Los diferentes types de "películas" producirían un comportamiento diferente al transferir "impulso" a la rueda. ¿Alguien puede sugerir ejemplos de tales cálculos?

Estoy particularmente interesado en aplicar el mismo concepto de inercia a un control giratorio personalizado como se describe aquí: control rotativo en el desbordamiento de la stack . Los ejemplos actuales, e incluso la aplicación convertbot mencionada en los ejemplos, no usan inercia. La rueda simplemente sigue el dedo y se ajusta a posiciones pnetworkingefinidas. Quiero hacer que una rueda similar se sienta como si tuviera una masa real, por lo que se puede girar y girar de forma pnetworkingecible hasta que se detenga suavemente. (Piense en el tipo de "rueda de la fortuna").

¿Cómo puedo lograr este tipo de comportamiento basado en la inercia de "rueda de la fortuna" para un control giratorio que haga sentir al control como si tuviera una masa real?

¡Gracias!

Implementar un efecto de masa completamente realist no es tan trivial, y tal vez requiere demasiado trabajo (especialmente para una tarea tan simple), por lo tanto, ignoraría las leyes físicas (excepto las estrictamente necesarias) y simplificaría todo.

Un impulso es rx F donde r es el radio y F es la fuerza aplicada. Dado que depende del radio, cuanto más te alejes del centro de tu rueda, mayor será el impulso. Ignoremos esto y supongamos que la fuerza es tangente y se aplica siempre a r = wheelWidth / 2 .

Además, en lugar de la fuerza de cálculo, simplemente puede hacerlo depende de la velocidad del gesto (más fácil que la fuerza de cálculo, ya que requiere masa y aceleración). Así podemos imaginar que un toque más rápido corresponderá a un mayor impulso.

Por supuesto, el gesto nunca será perfectamente horizontal o vertical, por lo que puede suponer que cada vez que se aplican dos torques: el primero corresponde al movimiento vertical y el segundo a la horizontal.

Puede get la velocidad del gesto, simplemente puede calcular la position inicial y final del toque y dividir su diferencia en el time transcurrido.

Para get el efecto de desacelerar, debe asumir que, cuando la rueda se mueve, siempre hay un par opuesto . Puede definirlo en time de compilation o hacerlo dependiente del ancho de su rueda (de modo que las ruedas más grandes se ralentizarán más rápido).

Ahora tienes prácticamente todo lo que necesitas … buena suerte 🙂

¡Descubrí que al usar iCarousel , es posible crear una rueda como control con inercia / momentum!