zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    笔记35 跨重定向请求传递数
    判断邮箱的正则表达式
    按钮
    async await 的用法
    笔记34 Spring MVC的高级技术——处理multipart形式的数据
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Unique Binary Search Trees,Unique Binary Search Trees II
    Validate Binary Search Tree
    Populating Next Right Pointers in Each Node,Populating Next Right Pointers in Each Node II
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6814680.html
Copyright © 2011-2022 走看看