UIPanGestureRecognizer上下左右滑动方向判断算法
Posted 北冥鱼_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIPanGestureRecognizer上下左右滑动方向判断算法相关的知识,希望对你有一定的参考价值。
CGFloat const gestureMinimumTranslation = 20.0;
typedef enum :NSInteger
kCameraMoveDirectionNone,
kCameraMoveDirectionUp,
kCameraMoveDirectionDown,
kCameraMoveDirectionRight,
kCameraMoveDirectionLeft
CameraMoveDirection;
@interfaceViewController ()
CameraMoveDirection direction;
@end
@implementation ViewController
- (void)viewDidLoad
[super viewDidLoad];
UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipe:)];
[self.viewWithGestureRecognizer addGestureRecognizer:recognizer];
// This is my gesture recognizer handler, which detects movement in a particular
// direction, conceptually tells a camera to start moving in that direction
// and when the user lifts their finger off the screen, tells the camera to stop.
- (void)handleSwipe:(UIPanGestureRecognizer *)gesture
CGPoint translation = [gesture translationInView:self.view];
if (gesture.state ==UIGestureRecognizerStateBegan)
direction = kCameraMoveDirectionNone;
else if (gesture.state == UIGestureRecognizerStateChanged && direction == kCameraMoveDirectionNone)
direction = [self determineCameraDirectionIfNeeded:translation];
// ok, now initiate movement in the direction indicated by the user's gesture
switch (direction)
case kCameraMoveDirectionDown:
NSLog(@"Start moving down");
break;
case kCameraMoveDirectionUp:
NSLog(@"Start moving up");
break;
case kCameraMoveDirectionRight:
NSLog(@"Start moving right");
break;
case kCameraMoveDirectionLeft:
NSLog(@"Start moving left");
break;
default:
break;
elseif (gesture.state == UIGestureRecognizerStateEnded)
// now tell the camera to stop
NSLog(@"Stop");
// This method will determine whether the direction of the user's swipe
- (CameraMoveDirection)determineCameraDirectionIfNeeded:(CGPoint)translation
if (direction != kCameraMoveDirectionNone)
return direction;
// determine if horizontal swipe only if you meet some minimum velocity
if (fabs(translation.x) > gestureMinimumTranslation)
BOOL gestureHorizontal = NO;
if (translation.y ==0.0)
gestureHorizontal = YES;
else
gestureHorizontal = (fabs(translation.x / translation.y) >5.0);
if (gestureHorizontal)
if (translation.x >0.0)
return kCameraMoveDirectionRight;
else
return kCameraMoveDirectionLeft;
// determine if vertical swipe only if you meet some minimum velocity
else if (fabs(translation.y) > gestureMinimumTranslation)
BOOL gestureVertical = NO;
if (translation.x ==0.0)
gestureVertical = YES;
else
gestureVertical = (fabs(translation.y / translation.x) >5.0);
if (gestureVertical)
if (translation.y >0.0)
return kCameraMoveDirectionDown;
else
return kCameraMoveDirectionUp;
return direction;
@end
以上是关于UIPanGestureRecognizer上下左右滑动方向判断算法的主要内容,如果未能解决你的问题,请参考以下文章
UIPanGestureRecognizer 有时无法在 iOS 7 上运行
带有 UIScrollView 的 UIPanGestureRecognizer