2011-08-07 12 views
10

Tengo una búsqueda de UIScrollView activada y configuré su clipToBounds = NO para que pueda ver la página actual fuera.iOS desarrollar. ¿Cómo extender el área de respuesta de eventos de desplazamiento de UIScrollView?

Lo que quiero es permitir al usuario desplazarse por el UIScrollView en toda su área visible, no solo la parte de la página actual.

¿Cómo puedo implementar esto?

Gracias.

P.S. De acuerdo con la documentación de Apple (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html), si el valor de la propiedad pagingEnabled es YES, la vista de desplazamiento se detiene en múltiplos de los límites de la vista de desplazamiento cuando el usuario se desplaza.

Esto significa que no puedo simplemente cambiar el tamaño del UIScrollView para obtener lo que quiero sin comprometer la funcionalidad de paginación, ¿verdad?

Respuesta

12

Ponga la ScrollView en un UIView y desactivar clipsToBounds del ScrollView. la vista de desplazamiento debe ser del tamaño que desee para paginación. Verás el contenido fuera de la vista de desplazamiento, pero la búsqueda seguirá siendo la misma. Puede activar clipsToBounce para que la vista externa limite el tamaño de la vista de desplazamiento.

Sobrescribe el hitTest de la vista para redirigir los toques a la vista de desplazamiento ... luego también podrá desplazarse tocando fuera de la vista de desplazamiento.

+0

Usando su respuesta, logré solucionar mi problema y, en el proceso, terminé con esta clase simple para automatizar dicho comportamiento cuando quiera. Cada vez que necesito expandir el área táctil de una vista sin cambiar su marco, la envuelvo con una vista que tiene un marco más amplio y configuro la clase de esa vista a la que escribí, funciona sin más ajustes. https://gist.github.com/diegoperini/8dfa345fca7c733c411dbec6e93729b0 – diegoperini

7

¿Por qué no cambia el tamaño de su scrollView para que se ajuste al área que necesita?

No estoy seguro si va a ayudar, pero trate de anular UIScrollView pointInside método

- (BOOL) pointInside:(CGPoint)point withEvent:(UIEvent *)event { 
    CGRect newBounds = self.bounds; 
    newBounds = CGRectInset(bounds, 0, -100.0f); 
    return CGRectContainsPoint(newBounds, point); 
} 
+0

Según tengo entendido, UIScrollView utilizará su tamaño para calcular la paginación, por lo que cambiar su tamaño pondrá en peligro la funcionalidad de paginación. Gracias de cualquier manera. – AKFish

+0

Puede aumentar contentSize en consecuencia y corregir posiciones de subvistas. –

+0

Ya lo intenté. Y obtener el tamaño de contentSize es esencial para la paginación. El resultado de la prueba es que UIScrollView solo responderá a los eventos táctiles dentro del área de delimitación de su fotograma, y ​​contentSize no tiene ningún efecto sobre este tema. – AKFish

Cuestiones relacionadas