2009-08-06 11 views
7

Problably usted sabe que el iPhone OS hace una demora artificial de aproximadamente 0,25 segundos después de un toque. Comienza: occures. Esto es para verificar si el usuario tiene la intención de moverse o no. Si los deltas se mueven significativamente durante este tiempo, se inicia una secuencia touchesMoved :.¿Es posible obtener puntos de contacto inmediatamente después de toques? Comienza: se llama?

Pero cuando desee implementar un comportamiento táctil táctil en su aplicación, es posible que no desee ninguna demora. ¡Se ve tan feo! Empiezas a mover algo y durante 0,3 segundos no pasa nada. Entonces, BANG y todo comienza a moverse con un gran tirón. Eso sucede cada vez que comienza una nueva secuencia táctil con movimiento. Esto es una mierda. Por supuesto, en algunas situaciones es necesario porque es posible que desee determinar si el usuario realmente deseaba moverse. pero no ocurre lo mismo en un control deslizante de creación personalizada u otro tipo de control táctil que funcione mediante el seguimiento de los movimientos táctiles.

Así que después de descubrir que esto está sucediendo intencionalmente en el iPhone OS, me gustaría saber cómo solucionar este problema. No puedo predecir el movimiento porque el usuario puede moverse hacia la izquierda o hacia la derecha. No sé esto en toquesBegan :. 0.3 segundos es suficiente para que la aplicación no responda.

Sin embargo, parece que hay esperanza: Convertbot no tiene absolutamente ningún problema con eso. La rueda gira inmediatamente después de tocarla y moverla. No hay retraso, no hay retraso. Le pregunté en su blog cómo lo hicieron, pero todavía no hay respuesta.

Espero que haya una forma de extraer manualmente las coordenadas táctiles del sistema. Cuando toqueBegan :, comenzaría un intervalo de 60 hz hasta toquesMoved: toma acción.

Así que la mayor pregunta en este planeta: "¿Cómo es posible?"

+0

Me gustaría hacer un Bounty fuera de esto. Pero parece que no puedo? –

+0

"¡BANG! ¡Todo comienza a moverse con un gran tirón!" Estoy buscando una solución para esto también. – bobobobo

+0

Todos hemos sido mordidos por esto en algún momento, creo. Hice una pregunta sobre esto hace un tiempo, pero no me di cuenta de que eran los toques. Los eventos modificados que se estaban retrasando causaban sacudidas en mi animación (pensé que era el código de renderizado real). Lo que realmente me molesta es que UIScrollView obtiene los eventos de movimiento de inmediato, son súper suaves. – U62

Respuesta

4

Si los respondedores están en UIScrollView, asegúrese de establecer la configuración retraysContentTouches de scrollView en NO. Esto funcionará tanto para UIResponder's touchesBegan: method como para UIControl's beginTrackingWithTouch: method.

0

Si su subclase UIView es una subvista de una UITableView o uno de sus descendientes, como UITableView, tiene que delaysContentTouches a NO en la vista de desplazamiento o la vista de tabla. De esa forma, enviará inmediatamente el primer toque a su touchesBegain:.

Sin embargo, creo que ConvertBot no usa UIScrollView en absoluto: probablemente sea una UIView personalizada la que implemente la parte giratoria. Si su interfaz de usuario no requiere desplazamiento, simplemente coloque su subclase UIView en la vista de contenido, y no tiene que establecer delaysContentTouches porque no hay vista de desplazamiento para interceptar eventos táctiles.

Cuestiones relacionadas