IOS: используйте жест для расчета расстояния от двух контрольных точек

У меня есть этот код для жеста в представлении

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


}

но это не работает нормально, и я не знаю, в чем проблема ... если провести пальцем снизу вверх, он вычисляет расстояние, а если вы делаете наоборот, он вычисляет большое другое расстояние, я не знаю я понимаю


person cyclingIsBetter    schedule 22.02.2012    source источник
comment
Посмотрите, имеют ли оба pointStart и pointEnd допустимые значения в последнем замыкании.   -  person Alexander    schedule 22.02.2012
comment
это ненормально: pointBegan: {19, 223} pointEnd: {19, 257} Distance: 257,701385 результат должен быть 34   -  person cyclingIsBetter    schedule 22.02.2012
comment
Нет, ты меня не понял. Добавьте печать значения для touchBegan в строку, где вы печатаете pointEnd.   -  person Alexander    schedule 22.02.2012


Ответы (1)


Определите точки как статические, иначе точка touchBegan потеряет свое значение. Это происходит потому, что установка значений каждой точки происходит в разных вызовах метода, и с каждым вы переопределяете точки в начале.

static CGPoint touchBegan;
static CGPoint pointEnd;
person Alexander    schedule 22.02.2012
comment
согласна. по крайней мере для тачначал. он не инициализирован в ветвях else if. - person danh; 22.02.2012