notes apple app iphone cocoa-touch core-animation

iphone - apple - Retardo con eventos táctiles



cocoa-touch core-animation (4)

Tenemos una aplicación en AppStore Bust ~ A ~ Spook con la que tuvimos un problema. Cuando tocas la pantalla usamos CALayer para encontrar la posición de todas las vistas durante su animación y si tocas una, iniciamos una secuencia de dado. Sin embargo, hay un retraso notable, parece como si los toques estuvieran amortiguados y recibimos el evento hasta tarde. ¿Hay alguna manera de sondear o una forma mejor de responder a los toques para evitar este retraso?

Esto está en una UIView no en UIScrollView


¿Estás usando UIScrollView para alojar todo esto? Hay una propiedad de eso llamado DelaysContentTouches. Por defecto, es SÍ, lo que significa que la vista intenta determinar si un toque es un gesto de desplazamiento o no, antes de pasarlo. Puede intentar configurar esto en NO y ver si eso ayuda.


Esta es una publicación bastante antigua sobre una aplicación de temporada, por lo que es probable que el OP aún no esté trabajando en este problema, pero en caso de que otros encuentren este mismo problema y lo encuentren útil.

Estoy de acuerdo con Kriem en que la sobrecarga de la CPU es una causa común de retraso significativo en el procesamiento táctil, aunque hay una gran cantidad de optimización que uno puede hacer antes de tener que extraer OpenGL. CALayer está bastante bien optimizado para los tipos de problemas que está describiendo aquí.

Primero debemos verificar lo básico:

  • CALayers agregados a la layer la vista principal
  • touchesBegan:withEvent: implementado en la vista principal
  • Cuando la fase es UITouchPhaseBegan , se llama a hitTest: en la layer la vista principal para encontrar la UITouchPhaseBegan adecuada
  • La secuencia del troquel comienza en el objeto del modelo relevante, actualizando la capa.

Entonces, podemos verificar el rendimiento usando Instruments. Asegúrate de que tu CPU no esté sobrecargada. ¿Funciona todo bien en el simulador pero tiene problemas en el dispositivo?

El problema que intentas resolver es muy común, por lo que no debes esperar que se requiera una solución compleja o difícil. Lo más probable es que el diseño o la implementación tenga un defecto básico y solo necesite solución de problemas.


Los toques demorados generalmente indican una sobrecarga de la CPU. Usar un NSTimer para una acción basada en fotograma a fotograma es propenso a interferir con el manejo táctil.

Si ese es el caso de su aplicación, mi consejo es muy simple: OpenGL.


Si está realizando algún tipo de animación de animación central de los CALayer al mismo tiempo que prueba los golpes, debe obtener presentationLayer antes de llamar a hitTest: ya que las posiciones de las capas del modelo no reflejan lo que podría suceder. estar en la pantalla, pero las posiciones a las que las capas están animando.

Espero que ayude.