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

¿Fue útil?

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
scroll top