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上下左右滑动方向推断算法的更多相关文章

  1. 23web app实现上下左右滑动

    转载请说明出处:http://blog.csdn.net/wowkk/article/category/1619287 (创意系列) /*最近项目须要苹果电脑,假设您支持学生创业并愿意赞助我们一台,请 ...

  2. Android监测手指上下左右滑动屏幕

    在开发android程序时,有时会需要监测手指滑动屏幕,当手指朝上下左右不同方向滑动时做出不同的响应,那怎么去实现呢? 利用Android提供的手势监测器就可以很方便的实现,直接上代码(已测试通过) ...

  3. JavaScript之屏幕上下左右滑动监听

    前言 存在这么一个需求,根据用户在屏幕不同的滑动方向(上.下.左.右),使用js脚本判断出不同的滑动行为,更新网页为不同的界面. 源码 参考了博文[1]的源码,但由于存在一些漏洞,比如:上下滑动事件监 ...

  4. 《移动端浏览器Touch事件判断手指滑动方向方法》

    $("body").on("touchstart", function(e) {     e.preventDefault();     startX = e. ...

  5. h5滑动方向、手机拖动层

    做h5时需对手指滑动方向判断及拖动浮动层,本文代码适用于手机端h5页面,pc页面可使用onMouseDown.onMouseUp.onMouseMove.(本方法仅为功能实现原理和演示,可根据自己的需 ...

  6. Android上下左右滑动,显示底层布局

    转载博客地址:http://www.cnblogs.com/flyme2012/p/4106308.html 闲着没事做了一个小东西.Android的上下左右滑动,显示底层布局.可以做类似于QQ消息列 ...

  7. 用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

    移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js ...

  8. ES6类封装判断用户上下左右滑动事件!

    /** * param 原生js方式实现判断用户的滑动方向 * 返回1 向上 * 返回2 向下 * 返回3 向左 * 返回4 向右 */ class juedgeSlide { constructor ...

  9. web移动前端页面,jquery判断页面滑动方向

    /*判断上下滑动:*/ $('body').bind('touchstart',function(e){ startX = e.originalEvent.changedTouches[0].page ...

随机推荐

  1. 【JavaScript 8—基础知识点】:DOM

    一.总体概述 1.1,什么是DOM DOM(Document Object Model):D(文档):整个web加载的网页文档:O(对象):类似于window对象之类的东西,可以调用属性和方法,在这里 ...

  2. ASP.NET(四):ASP.net实现假分页显示数据

    导读:在做数据查询的时候,有的时候查询到的数据有很多.通常呢,我们一般都是去拖动右侧边的滚动条.但是,有了分页后,我们就可以不必是使用滚动条,而直接通过分页查看我们想要的数据.在分页的过程中,有分为真 ...

  3. RESTful API接口

    我所理解的RESTful Web API [设计篇] 百度:RESTful restful一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件 ...

  4. 九度oj 题目1107:搬水果

    题目描述: 在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆.每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和.当然经 ...

  5. MAC生成公钥私钥

    前言 需要开发者在本地上使用openssl来生成私钥和公钥 由于mac 自带openssl工具,所以不用像windows那样要下载安装openssl工具 步骤 1.创建一个文件夹,终端进入该文件夹 c ...

  6. [kubernetes] 使用 Minikube 快速搭建本地 k8s 环境 (基于 Docker 驱动模式)

    一.实验环境 操作系统:Centos 7 x86_64 Docker:1.12.6 二.部署 k8s 步骤 2.1  安装 kubectl cat <<EOF > /etc/yum. ...

  7. BZOJ 3856: Monster【杂题】

    Description Teacher Mai has a kingdom. A monster has invaded this kingdom, and Teacher Mai wants to ...

  8. AJAX技术简介

    AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. 您应当具备的基础知识 在继续学习之前,您需要对下面的知识有基本的了解: HTML / XHTML CSS JavaScript ...

  9. 转:C++ Vector用法深入剖析

    http://developer.51cto.com/art/201002/183645.htm C++编程语言中有一种叫做Vector的应用方法,它的作用在实际编程中是非常重要的.在这里我们将会为大 ...

  10. Scrapy学习-4-Items类&Pipelines类

    items类使用 作用 能使得我们非常方便的操作字段名 在items.py中定制我们的类 class ArticleItem(scrapy.Item): title = scrapy.Field() ...