programming learn framework development desarrollador cuenta app iphone cocoa-touch uiscrollview

iphone - framework - learn ios



Cómo cancelar el desplazamiento en UIScrollView (5)

Uso UIScrollView para crear una IU de gran tamaño (más de 320 píxeles) en iPhone.

Hice una instancia de UIScrollView y agregué algunas subvistas en ella. El problema es que quiero habilitar el desplazamiento solo cuando el usuario toca fuera de las subvistas, dejar de desplazarse cuando el usuario toca una de las subvistas.

Leí documentos y traté de encontrar muestras, pero no puedo encontrar una buena pista. Si tienes alguna idea, ayúdame.


UIScrollView tiene una propiedad scrollEnabled que le permite desactivar el desplazamiento programatically. También tiene un delegado (UIScrollViewDelegate) que le permite ver eventos como desplazamiento de inicio / finalización. Parece que deberías poder cocinar algo con esas opciones combinadas de alguna manera.


También puede subastrar UIScrollViewController y anular los métodos touchesBegan, touchesMoved y touchesEnded. Si su implementación nunca llama a la implementación de la superclase, entonces no se desplazará.


La forma más sencilla de hacer esto es establecer delayContentTouches en NO para scrollview. De esta forma, se establece el comportamiento predeterminado para que todo lo que sea un UIControl pase los toques al control inmediatamente y todo lo demás se desplazará.


La propiedad en la que realmente estás interesado, y en realidad estoy probando esto ahora, porque tengo el mismo problema que tú, es canCancelContentTouches .

Si el valor de esta propiedad es NO, la vista de desplazamiento no se desplaza independientemente del movimiento del dedo una vez que la vista de contenido comienza a rastrear.

Si esto no le da los resultados que desea, subclase UIScrollView y anule el touchesShouldBegin:withEvent:inContentView , que es lo que sugiere la respuesta aceptada.


Si desea detectar toques dentro de cualquiera de las subvistas de UIScrollView, deberá subclase UIScrollView y reemplazar los métodos touchesShouldBegin y touchesShouldCancelInContentView creados específicamente para este fin.

Aparte de esto, no hay forma de que pueda identificar toques en las subvistas, ya que UIScrollView tiende a manejar todos los toques y no los pasa a sus subvistas.

Todo lo mejor.