2011-01-02 10 views
24

La aplicación iPod (Music) de Apple tiene un deslizador (UISlider, supongo) con velocidades de depuración variables: cuanto más alejado del control deslizante verticalmente, menor es la proporción de su horizontal velocidad de arrastre que se refleja en el cambio de valor del control deslizante. ¿Alguien ha descubierto cómo duplicar este comportamiento?UISlider con velocidades variables de depuración (como la aplicación iPod)

Respuesta

31

Buena pregunta que me inspiró para encontrar una solución. Creé una clase llamada OBSlider que admite velocidades de depuración variables.

La solución en resumen: subclase UISlider, anular -continueTrackingWithTouch:withEvent: y hacer el cálculo del cambio de self.value dependiendo del movimiento del toque usted mismo. De este modo, puede influir libremente en el factor con el que desea multiplicar el movimiento táctil para obtener el nuevo valor del control deslizante.

Para obtener más información, lea la publicación de mi blog: OBSlider, a UISlider subclass with variable scrubbing speed.

+0

muy agradable. No hace exactamente lo que hace el control deslizante de la aplicación iPod. Observe cómo, si arrastra una distancia desde el control deslizante de la aplicación iPod y continúa arrastrando hacia arriba hacia el control deslizante, el pulgar se mueve hacia usted hasta que se encuentra con el control deslizante. Sin embargo, definitivamente has demostrado cuáles son los valores que deben manipularse, y esto es lo que estaba teniendo problemas para resolver. (Yo también estaba anulando 'continueTrackingWithTouch: withEvent:' y estableciendo 'self.value', pero simplemente no estaba obteniendo el comportamiento correcto.) – matt

+0

@matt: Sí, me di cuenta. Aunque no estoy seguro de que me guste más el comportamiento del iPod. –

+0

@matt: Cambié el código por lo que se comporta más como el control deslizante en la aplicación de iPod. –

4

Buen trabajo Ole! He hecho algunas modificaciones menores para obtener algo más parecido a la forma en que funciona el control deslizante de la aplicación iPod al acercar el dedo al UISlider. Básicamente manejo una variable para rastrear el valor correspondiente a la posición del dedo, y si el usuario se está acercando, aplico una fórmula diferente (que no es perfecta y podría mejorarse mucho).

Mi tenedor está disponible aquí: http://github.com/sylverb/OBSlider

+0

@Sylverb: No vi su respuesta aquí hasta hace un momento y acabo de hacer algunas modificaciones propias para que se comporte más como el iPod. Revisaremos tus cambios ahora, tal vez quieras echar un vistazo a los míos. –

+1

@Ole Begemann: Parece bastante diferente del control deslizante del reproductor iPod: - la modificación de posición solo debe ocurrir cuando el usuario se acerca al control deslizante. En su implementación, la modificación se produce cuando la coordinación y cambia - ¡la modificación del control deslizante parece seguir los pasos de scrubbingSpeed ​​en lugar de beeing linear! Mis modificaciones aún no son perfectas (la fórmula para integrar el impacto de la coordenada y no es perfecta), pero tiene un comportamiento más similar al del reproductor de ipod. – Sylverb

+0

Tiene razón, no debería cambiar el valor al arrastrarme desde el control deslizante. –

Cuestiones relacionadas