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

UIPanGestureRecognizer Swift Capture 相对翻译

有限制地上下移动视图

视频屏幕左半部分上下滑动改变亮度,右半部分上下滑动改变声音

EasyUI 左,右(上下)布局