2011-03-20 10 views
7

Tengo una UIScrollView ontop de mi UIViewController recreando un efecto como en la aplicación Gowalla iPhone cuando estás en la página de un spot. Debajo de mi vista de desplazamiento tengo un botón que quiero poder realizar su acción incluso cuando el marco de la vista de desplazamiento lo cubre (donde está sobre el botón, la vista de desplazamiento está despejada). ¿Cómo haría algo como esto? ¿Es posible? (tiene que ser, Gowalla [de alguna manera] lo hizo)¿Cómo obtener una UIView debajo de UIScrollView para detectar toques?

Respuesta

0

No tengo idea de qué podría hacer esta aplicación "Gowalla"; con suerte, su descripción de "un botón detrás de la vista de desplazamiento, que puede tocar 'a través' de la vista de desplazamiento" es precisa.

Si su botón detrás de la vista de desplazamiento puede dimensionarse para llenar toda el área contentSize de la vista de desplazamiento sin atornillar su interfaz, la solución más fácil sería simplemente colocarla dentro de la vista de desplazamiento (en todas las otras vistas) y haz exactamente eso.

De lo contrario, su mejor opción es probablemente crear una vista personalizada con un fondo claro para colocarla en la vista de desplazamiento como se indicó anteriormente. La solución fácil es tener la vista personalizada (probablemente un UIControl) simplemente haga lo que toque el botón. Si eso no es posible por alguna razón, su mejor opción sería anular hitTest:withEvent: en la vista personalizada para devolver el botón subyacente. Sería cauteloso de anular hitTest:withEvent: en la vista de desplazamiento, ya que podría interferir con el desplazamiento.

0

Pruebe agregar el botón en la parte superior de la vista de desplazamiento. El único problema con eso es que si presiona el botón, no podrá interactuar con scrollView, pero seguirá estando visible.

2

En cuanto a mí, transferiré el evento táctil a otra vista anulando los siguientes métodos.

  • - touchesBegan: withEvent:
  • - touchesMoved: withEvent:
  • - touchesEnded: withEvent:
  • - touchesCancelled: withEvent:

igual de esta manera,

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    // pass touch event by default implement. 
    [super touchesBegan:touches withEvent:event]; 

    // redirect the touch events. 
    [anotherView touchesBegain:touches withEvent:event];  
} 

hitTest: withEvent: se utiliza para decidir qué vista va a eventos táctiles respuesta en el árbol vista de jerarquía. Si la vista no quiere responder al evento touch, devolverá nil en hitTest. Como resultado, no se invocarán los métodos de evento táctiles anteriores.

+0

Esta es una buena respuesta. Lo aprecio. –

Cuestiones relacionadas