2012-07-18 10 views

Respuesta

1

Puede rastrear la diferencia en el desplazamiento del contenido. Mantenga el anterior en una variable miembro/estática y verifique con la corriente. Si el valor anterior es inferior, el desplazamiento se dirigió hacia abajo y viceversa.

2

UITableView es una subclase UIScrollView, por lo tanto usted puede establecerse como UIScrollViewDelegate y obtener devoluciones de vista delegar devoluciones de llamada.

El argumento para uno de estos métodos delegados (-scrollViewDidScroll:) es la vista de desplazamiento que se desplazó, puede compararlo con las vistas de la tabla para saber cuál fue el que se desplazó.


Lo sentimos, leí mal su pregunta. Pensé que quería saber que se está desplazando la vista de tabla (me perdí el "camino").

Para saber la dirección, puede mantener el desplazamiento anterior en una variable y ver si el delta (actual.y - anterior.y) es positivo (desplazamiento hacia abajo) o negativo (desplazamiento hacia arriba).

41
-(void) scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGPoint currentOffset = scrollView.contentOffset; 
    if (currentOffset.y > self.lastContentOffset.y) 
    { 
     // Downward 
    } 
    else 
    { 
     // Upward 
    } 
    self.lastContentOffset = currentOffset; 
} 
+0

Hola necesito ayuda para lograrlo. ¿dónde estableces self.lastContentOffset? gracias :) – veereev

+2

Hola solo defino una propiedad en su clase de delegado de desplazamiento. @property (assign, nonatomic) CGPoint lastContentOffset; – citydeer

+0

voltear respuesta impresionante, gracias :) @citydeer – Supertecnoboff

12

¿Podríamos hacer de esta manera?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 

     if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) { 
     // down 
     } else { 
     // up 
     } 

    } 
+0

Esto enviará hacia arriba o hacia abajo dependiendo del contacto inicial, por lo que si usted comenzará a PT200, PT100 a moverse hacia arriba y hacia abajo para pt199, obtendrá hasta el estado de todos modos –

+0

perfecto! Esto resuelve el problema de la dirección de desplazamiento de cambio de rebote UIScrollView. – chicobermuda

+0

Esto no es cierto, si se desplaza hacia abajo permite decir 100.0pt y 1.0pt hacia arriba, su código activará la parte baja (translation.y será 99,0) –

28
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
        withVelocity:(CGPoint)velocity 
      targetContentOffset:(inout CGPoint *)targetContentOffset{ 

    if (velocity.y > 0){ 
     NSLog(@"up"); 
    } 
    if (velocity.y < 0){ 
     NSLog(@"down"); 
    } 
} 
+2

Esta parece ser la mejor respuesta ... –

+0

impresionante .. !! !:) – itsji10dra

+0

Y si quieres hacer un pull de homebrew para refrescar (u otros comportamientos relativos de offset de vista), este método es donde te unirías cuando detectes el desplazamiento de scrollview - NO el 'targetContentOffset' (que es donde terminaría el scroll después de la animación): 'if (scrollView.contentOffset.y <0) { // scroll está por encima de 0,0 aka espacio negativo donde la vista de actualización sería }' –

0
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
{ 
    if (yourTableView.isDragging || yourTableView.isDecelerating) 
     { 
       // your tableview is scrolled. 
       // Add your code here 
     } 
} 

aquí hay que reemplazar su nombre tableview en lugar de "yourTableView".

yourTableView.isDragging - Devuelve SÍ si el usuario ha comenzado a desplazarse. esto puede requerir un tiempo y/o distancia para avanzar.

yourTableView.isDecelerating - Devuelve SÍ si el usuario no está arrastrando (retoque) pero la vista de desplazamiento todavía se está moviendo.

0

Puede hacerlo implementando el método delegado UIScrollView de esta manera, es elegante.

PS: lastOffset y scrollingUpward es propiedad de ViewController.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGPoint currentOffset = scrollView.contentOffset; 
    self.scrollingUpward = currentOffset.y > self.lastOffset.y; 
    self.lastOffset = currentOffset; 
} 
1
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 

     if targetContentOffset.memory.y < scrollView.contentOffset.y { 
      //println("Going up!") 

     } else { 
      // println("Going down!") 

     } 
    } 
Cuestiones relacionadas