0

我想创建一个简单的应用程序,用户可以在屏幕上保持手指的同时向左滑动然后向右滑动。我想统计他们做了多少次总挥动,包括方向的改变。我正在使用带有方向的uiswipegesture,但它只是在新的刷卡时调用该操作。更有意义的是,它几乎测试了用户在特定时间范围内可以将手指左右移动多少次。目前,我有这样的方法我viewDidLoad中滑动ios手势

UISwipeGestureRecognizer *oneFingerSwipeLeft = [[UISwipeGestureRecognizer alloc] 
               initWithTarget:self 
               action:@selector(oneFingerSwipeLeft:)]; 
[oneFingerSwipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft]; 
[[self view] addGestureRecognizer:oneFingerSwipeLeft]; 

,然后这里面的动作

-(void) oneFingerSwipeLeft:(UIGestureRecognizer*)recognizer { 
NSLog(@"user swipped left"); 
} 

任何帮助,将不胜感激。

+1

尝试使用'UIPanGesture'。 – Akhilrajtr

回答

1

我会做这样的事情。

设置一些变量来保存您跟踪什么:

@property (nonatomic) int swipeCount; 
@property (nonatomic) CGPoint previousLocation; 

创建UIPanGestureRecognizer:

UIPanGestureRecognizer *gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didRecognizePanWithGestureRecognizer:)]; 
[gesture setDelegate:self]; 
[self.view addGestureRecognizer:gesture]; 

处理回调

- (void)didRecognizePanWithGestureRecognizer:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    switch (gestureRecognizer.state) 
    { 
     case UIGestureRecognizerStateBegan: 
      [self handleGestureBeganWithRecognizer:gestureRecognizer]; 
      break; 

     case UIGestureRecognizerStateChanged: 
      [self handleGestureChangedWithRecognizer:gestureRecognizer]; 
      break; 

     case UIGestureRecognizerStateEnded: 
     case UIGestureRecognizerStateCancelled: 
     case UIGestureRecognizerStateFailed: 
      [self handleGestureEndedWithRecognizer:gestureRecognizer]; 
      break; 

     default: 
      break; 
    } 
} 

跟踪你正在寻找的信息当用户来回滑动时捕获

- (void)handleGestureBeganWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    [self setSwipeCount:0]; 
    [self setPreviousTouchLocation:[gestureRecognizer locationInView:self.view]]; 
} 

- (void)handleGestureChangedWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    CGPoint currentTouchLocation = [gestureRecognizer locationInView:self.view]; 
    CGFloat delta = currentTouchLocation.x - self.previousTouchLocation.x; 
    [self setPreviousTouchLocation:currentTouchLocation]; 

    //... figure out if they changed directions based on delta positive or negative 

} 

- (void)handleGestureEndedWithRecognizer:(UIPanGestureRecognizer *)gestureRecognizer 
{ 
    //.... finish up 
}