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. Leetcode 322.零钱兑换

    零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: co ...

  2. 九度oj 题目1337:寻找最长合法括号序列

    题目描述: 给你一个长度为N的,由’(‘和’)’组成的括号序列,你能找出这个序列中最长的合法括号子序列么?合法括号序列的含义便是,在这个序列中,所有的左括号都有唯一的右括号匹配:所有的右括号都有唯一的 ...

  3. 九度oj 题目1020:最小长方形

    题目描述:     给定一系列2维平面点的坐标(x, y),其中x和y均为整数,要求用一个最小的长方形框将所有点框在内.长方形框的边分别平行于x和y坐标轴,点落在边上也算是被框在内. 输入: 测试输入 ...

  4. iOS开发工具篇-AppStore统计工具

    苹果官方的iTunes Connect提供的销售数据统计功能比较弱,例如只能保存最近30天的详细销售数据,界面丑陋, 无法查看App的排名历史变化情况等. 早有一些公司提供了专门的解决方案或工具.这些 ...

  5. 常州模拟赛d3t3 两只怪物心心相印

    题目背景 从前我是一位无名的旅人,旅途中我得到了某样东西:贤者之石.我因此得到悠久的时光和漂泊的生命.1897年冬天,我一时兴起舍弃了旅人的生活. 贤者之石创造出来的,是货真价实的黄金.我的名声传遍了 ...

  6. [HDU-5536] Chip Factory (01字典树)

    Problem Description John is a manager of a CPU chip factory, the factory produces lots of chips ever ...

  7. 【CCF】交通规划 Dijstra变形 优先级队列重载

    [题意] 给定一个无向图,求这个图满足所有点到顶点的最短路径不变的最小生成树 [AC] 注意双向边要开2*maxm 注意优先级队列 参考https://www.cnblogs.com/cielosun ...

  8. Annual Congress of MUD

    Annual Congress of MUD 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Multiuser dungeon games, also called MUD games ...

  9. 【HDOJ5980】Find Small A(签到)

    题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...

  10. BZOJ 1090 字符串折叠(Hash + DP)

    题目链接 字符串折叠 区间DP.$f[l][r]$为字符串在区间l到r的最小值 正常情况下 $f[l][r] = min(f[l][r], f[l][l+k-1]+f[l+k][r]);$ 当$l$到 ...