UISwipeGestureRecognizer Swipe length
Aucune idée si il existe un moyen d'obtenir la longueur d'un geste de balayage ou la touche pour que je puisse calculer la distance?
5 réponses
il est impossible d'obtenir une distance à partir d'un geste de swipe, parce que le SwipeGesture déclenche la méthode où vous pourriez accéder à l'emplacement exactement une fois, lorsque le geste a pris fin.
Peut-être que vous voulez utiliser un UIPanGestureRecognizer.
S'il vous est possible d'utiliser pan gestuel, vous sauvegarderez le point de départ de la casserole, et si la casserole est terminée, calculez la distance.
- (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);
}
}
Rapide
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
}
}
}
Hope qui aide tous vous Swift pionniers
vous ne pouvez le faire que de manière standard: souvenez-vous du point de contact de touchBegin et comparez le point de touchEnd.
pour ceux d'entre nous qui utilisent de la Xamarine:
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);
}
}
func swipeAction(gesture: UIPanGestureRecognizer) {
let transition = sqrt(pow(gesture.translation(in: view).x, 2)
+ pow(gesture.translation(in: view).y, 2))
}