2014-09-23 129 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。你應該把它變成一個實例變量。