2014-09-23 125 views
0

我期待在用户滑过屏幕时获得实时刷卡数据。这里是我的代码:获取UIPanGesture的划动距离

-(void)initViewWithCIImage:(CIImage*) ciImage UIImage:(UIImage*)uiimage 
{ 
    _originalUIImage = uiimage; 
    _originalCIImage = ciImage; 
    CIContext *context = [CIContext contextWithOptions:nil]; 
    _currentCGImageRef = [context createCGImage:_originalCIImage fromRect:[_originalCIImage extent]]; 
    _picture.image = uiimage; 
} 

-(void)swipeRecognized:(UISwipeGestureRecognizer *)swipe 
{ 
    CGPoint startLocation; 

    if (swipe.state == UIGestureRecognizerStateBegan) 
    { 
     startLocation = [swipe locationInView:self.view]; 
    } 
    else 
    { 
     NSLog(@"start loc is %f",startLocation.x); 
     CGPoint stopLocation = [swipe 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); 
    } 
} 

当我开始滑动,我得到一个有效的距离点。然而,由于我继续刷我得到的距离是无限的:

这里是一个日志打印出我的代码:

2014年9月23日17:06:57.735 CameraApp [2503:60B] startLocation.x是-0.000000

2014年9月23日17:06:57.738 CameraApp [2503:60B]距离:856.214417

2014年9月23日17:06:57.739 CameraApp [2503:60B] startLocation.x是 - 413119666577672720342843392.000000

2014-09-23 17:06:57.740 CameraApp [2503:60b]距离:inf

....重复最后两行,因为我刷卡

你能想到为什么我得到无限的或如何设置我的代码了更好地得到实时刷卡距离数据?

谢谢!

+0

'startLocation'是一个局部变量。在“开始”以外的手势状态中,您不会初始化“startLocation”。你应该把它变成一个实例变量。 – rmaddy 2014-09-23 21:15:17

+0

大规模的锐皮!谢谢。 把它作为答案,我会给你充分的信贷。我太深,不注意基本面!谢谢你的新鲜眼睛 – Aggressor 2014-09-23 21:16:36

回答

1

startLocation是一个局部变量。在除“开始”以外的手势状态中,您不会初始化导致奇怪值的startLocation。你应该把它变成一个实例变量。