2011-01-28 3 views
30

Любая идея, если есть способ получить длину жестового салфетки или касаний, чтобы я мог рассчитать расстояние?UISwipeGestureRecognizer Длина прокрутки

+0

Я думаю, что вы можете только получить направление fr om UISwipeGestureRecognizer. Может быть, вы можете получить позицию, где начинается прикосновение, и где оно заканчивается, и рассчитать длину от этого. – picknick

ответ

53

Невозможно получить дистанцию ​​от жестов салфетки, поскольку SwipeGesture запускает метод, когда вы можете получить доступ к местоположению ровно один раз, когда жест закончился.
Возможно, вы хотите использовать UIPanGestureRecognizer.

Если вы можете использовать жест панорамы, вы сохраните начальную точку кастрюли, и если панорама закончится, вычислите расстояние.

- (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

Большое спасибо за идею! – Tomo

+0

должен 'sqrt' быть' sqrtf'? – ZeR0

+9

Если вы используете UIPanGestureRecognizer, просмотр встроенного метода - (CGPoint) translationInView: (UIView *) работает очень хорошо. – Jon

2

Вы можете сделать это стандартным способом: запомнить сенсорную точку touchBegin и сравнить точку с touchEnd.

2

Для тех из нас, используя 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

В 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 

     } 

    } 

} 

Надежда, которая помогает всем вам Swift пионерами

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

Обратите внимание: код не отвечает. Пожалуйста, добавьте немного объяснений. – GhostCat

Смежные вопросы