IOS: Use un gesto para calcular la distancia desde dos CGPoint
-
29-10-2019 - |
Pregunta
Tengo este código para el gesto en una vista
- (void)rightSwipeHandle:(UIPanGestureRecognizer*)gestureRecognizer{
CGPoint touchBegan;
CGPoint pointEnd;
if (gestureRecognizer.state == UIGestureRecognizerStateBegan)
{
CGPoint touchBegan = [gestureRecognizer locationInView: gestureRecognizer.view];
NSLog(@"pointBegan:%@",NSStringFromCGPoint(touchBegan));
}
else if (gestureRecognizer.state == UIGestureRecognizerStateChanged)
{
}
else if (gestureRecognizer.state == UIGestureRecognizerStateEnded ||
gestureRecognizer.state == UIGestureRecognizerStateCancelled ||
gestureRecognizer.state == UIGestureRecognizerStateFailed)
{
pointEnd = [gestureRecognizer locationInView:gestureRecognizer.view];
NSLog(@"pointEnd:%@", NSStringFromCGPoint(pointEnd));
CGFloat xDist = (pointEnd.x - touchBegan.x);
CGFloat yDist = (pointEnd.y - touchBegan.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
NSLog(@"distance:%f", distance);
}
}
Pero no funciona bien y no sé dónde está el problema ... Si el deslizamiento es de abajo hacia arriba, calcula una distancia y si haces lo contrario, calcula una gran distancia diferente, no 'TRENDE ENTENDER
Solución
Defina los puntos como estáticos, de lo contrario, el punto Touchbegan perderá su valor. Ocurre porque establecer los valores de cada punto ocurre en diferentes llamadas de método y con cada una, redefine los puntos al principio.
static CGPoint touchBegan;
static CGPoint pointEnd;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow