#define HORIZ_SWIPE_DRAG_MIN 100 CGPoint mystartTouchPosition; BOOL isProcessingListMove; - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint newTouchPosition = [touch locationInView:self.view]; if(mystartTouchPosition.x != newTouchPosition.x || mystartTouchPosition.y != newTouchPosition.y) { isProcessingListMove = NO; } mystartTouchPosition = [touch locationInView:self.view]; [super touchesBegan:touches withEvent:event]; } -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = touches.anyObject; CGPoint currentTouchPosition = [touch locationInView:self.view]; // If the swipe tracks correctly. double diffx = mystartTouchPosition.x - currentTouchPosition.x + 0.1; // adding 0.1 to avoid division by zero double diffy = mystartTouchPosition.y - currentTouchPosition.y + 0.1; // adding 0.1 to avoid division by zero if(abs(diffx / diffy) > 1 && abs(diffx) > HORIZ_SWIPE_DRAG_MIN) { // It appears to be a swipe. if(isProcessingListMove) { // ignore move, we're currently processing the swipe return; } if (mystartTouchPosition.x < currentTouchPosition.x) { isProcessingListMove = YES; [self moveToPreviousItem]; return; } else { isProcessingListMove = YES; [self moveToNextItem]; return; } } else if(abs(diffy / diffx) > 1) { isProcessingListMove = YES; [super touchesMoved:touches withEvent:event]; } } -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { isProcessingListMove = NO; [super touchesEnded:touches withEvent:event]; }
-(void)moveToPreviousItem{ NSLog(@"Move To Previous Item"); } -(void)moveToNextItem{ NSLog(@"Move To Next Item"); }
这里的isProcessingListMove 是一个BOOL布尔类型,mystartTouchPosition是CGPoint类型,可以用的!