2011-01-28 17 views
30

¿Alguna idea de si hay una manera de obtener la longitud de un gesto de deslizar o los toques para que pueda calcular la distancia?UISwipeGestureRecognizer Longitud del deslizamiento

+0

creo que sólo puede obtener dirección fr om UISwipeGestureRecognizer. Tal vez puedas obtener la posición donde comienza el toque y dónde termina y calcular el largo de eso. – picknick

Respuesta

53

Es imposible alejarse de un gesto de deslizamiento, ya que SwipeGesture activa el método donde puede acceder a la ubicación exactamente una vez, cuando el gesto ha finalizado.
Quizás desee utilizar un UIPanGestureRecognizer.

Si le es posible utilizar el gesto pan, guardaría el punto inicial de la bandeja y, si la bandeja ha terminado, calcule la distancia.

- (void)panGesture:(UIPanGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateBegan) { 
     startLocation = [sender locationInView:self.view]; 
    } 
    else if (sender.state == UIGestureRecognizerStateEnded) { 
     CGPoint stopLocation = [sender locationInView:self.view]; 
     CGFloat dx = stopLocation.x - startLocation.x; 
     CGFloat dy = stopLocation.y - startLocation.y; 
     CGFloat distance = sqrt(dx*dx + dy*dy); 
     NSLog(@"Distance: %f", distance); 
    } 
} 
+1

¡Muchas gracias por la idea! – Tomo

+0

debería 'sqrt' ser' sqrtf'? – ZeR0

+9

Si usa un UIPanGestureRecognizer, el método integrado - (CGPoint) translationInView: (UIView *) funciona muy bien. – Jon

2

Solo puede hacerlo de una manera estándar: recuerde el punto de contacto TouchBegin y compare el punto desde touchEnd.

2

Para aquellos de nosotros usando Xamarin:

void panGesture(UIPanGestureRecognizer gestureRecognizer) { 
    if (gestureRecognizer.State == UIGestureRecognizerState.Began) { 
     startLocation = gestureRecognizer.TranslationInView (view) 
    } else if (gestureRecognizer.State == UIGestureRecognizerState.Ended) { 
     PointF stopLocation = gestureRecognizer.TranslationInView (view); 
     float dX = stopLocation.X - startLocation.X; 
     float dY = stopLocation.Y - startLocation.Y; 
     float distance = Math.Sqrt(dX * dX + dY * dY); 
     System.Console.WriteLine("Distance: {0}", distance); 
    } 
} 
13

En Swift

override func viewDidLoad() { 
    super.viewDidLoad() 

    // add your pan recognizer to your desired view 
    let panRecognizer = UIPanGestureRecognizer(target: self, action: Selector("panedView:")) 
    self.view.addGestureRecognizer(panRecognizer) 

} 

func panedView(sender:UIPanGestureRecognizer){ 
    if (sender.state == UIGestureRecognizerState.Began) { 
     startLocation = sender.locationInView(self.view); 
    } 
    else if (sender.state == UIGestureRecognizerState.Ended) { 
     let stopLocation = sender.locationInView(self.view); 
     let dx = stopLocation.x - startLocation.x; 
     let dy = stopLocation.y - startLocation.y; 
     let distance = sqrt(dx*dx + dy*dy); 
     NSLog("Distance: %f", distance); 

     if distance > 400 { 
      //do what you want to do 

     } 

    } 

} 

Esperamos que ayuda a todo lo que los pioneros Swift

0
func swipeAction(gesture: UIPanGestureRecognizer) { 
    let transition = sqrt(pow(gesture.translation(in: view).x, 2) 
        + pow(gesture.translation(in: view).y, 2)) 
} 
+3

Tenga en cuenta: se desaconsejan las respuestas de solo código. Por favor agrega un poco de explicación. – GhostCat

Cuestiones relacionadas