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

  • 相关阅读:
    Working with File Contents and Files in Power Automate
    Quickly edit data in your Common Data Service
    Import Excel Data into a Model Driven PowerApp using Data Integration Project
    mybatis 的CRUD操作
    网络编程
    字节流、字符流
    File类、递归
    线程池
    等待与唤醒案例
    线程
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6814680.html
Copyright © 2011-2022 走看看