2012-02-22 158 views
3

我有姿势这段代码在一个视图中IOS:使用手势从两个cgpoint计算距离

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


} 

,但它不正常工作,我不知道问题出在哪里? 如果滑动是从底部到顶部,它计算一个距离,如果你做相反它计算一个很大的不同距离,我不明白

+0

查看pointStart和pointEnd是否在最后一次闭包中有有效值。 – Alexander 2012-02-22 14:36:58

+0

这不正常: pointBegan:{19,223} pointEnd:{19,257} distance:257.701385 result must be 34 – CrazyDev 2012-02-22 14:57:08

+0

不,你不了解我。在打印'pointEnd'的行中为'touchBegan'添加值打印。 – Alexander 2012-02-22 15:16:35

回答

5

定义点为静态,否则触摸点将失去它的价值。发生这种情况是因为设置每个点的值出现在不同的方法调用中,并且每个点都在开始时重新定义点。

static CGPoint touchBegan; 
static CGPoint pointEnd; 
+1

同意。至少对touchBegan来说。它在其他分支中未被初始化。 – danh 2012-02-22 15:29:56