/ / UISwipeGestureRecognizer Długość machnięcia - iPhone, iPad, iOS, UigestureRecognizer, gest

UISwipeGestureRecognizer Długość machnięcia - iphone, ipad, ios, uigesturerecognizer, gest

Masz pomysł, czy istnieje sposób, aby uzyskać długość gestu machnięcia lub dotknięć, aby móc obliczyć odległość?

Odpowiedzi:

55 dla odpowiedzi № 1

Nie można uzyskać odległości od gestu przeciągnięcia, ponieważ SwipeGesture uruchamia metodę, w której można uzyskać dostęp do lokalizacji dokładnie raz, gdy gest się zakończy.
Może chcesz użyć UIPanGestureRecognizer.

Jeśli możesz użyć gestu panoramy, zapisz punkt początkowy panoramy, a jeśli panorama się zakończy, oblicz odległość.

- (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);
}
}

15 dla odpowiedzi nr 2

W 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)

}

@objc func panedView(sender:UIPanGestureRecognizer){
var startLocation = CGPoint()
if (sender.state == UIGestureRecognizerState.began) {
startLocation = sender.location(in: self.view)
}
else if (sender.state == UIGestureRecognizerState.ended) {
let stopLocation = sender.location(in: 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
}
}
}

Mam nadzieję, że pomoże wam wszystkim, pionierom Swift


2 dla odpowiedzi nr 3

Możesz to zrobić tylko w standardowy sposób: zapamiętaj punkt dotykowy touchBegin i porównaj punkt z touchEnd.


2 dla odpowiedzi № 4

Dla tych z nas, którzy używają 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);
}
}

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