`
119568242
  • 浏览: 426884 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[ios]ios的手势操作之UIGestureRecognizer浅析

    博客分类:
  • ios
 
阅读更多

转自:http://blog.csdn.net/likendsl/article/details/7554150

 

一、概述

iPhone中处理触摸屏的操作,在3.2之前是主要使用的是由UIResponder而来的如下4种方式:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

但是这种方式甄别不同的手势操作实在是麻烦,需要你自己计算做不同的手势分辨。后来。。。

苹果就给出了一个比较简便的方式,就是使用UIGestureRecognizer

二、UIGestureRecognizer

UIGestureRecognizer基类是一个抽象类,我们主要是使用它的子类(名字包含链接,可以点击跳到ios Developer library,看官方文档):

从名字上我们就能知道, Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan (拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。

举个例子,可以在viewDidLoad函数里面添加:

 

  1. -(void) viewDidLoad  
  2. {  
  3.  [super viewDidLoad];  
  4.  // Do any additional setup after loading the view from its nib.  
  5.  UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];  
  6.  [self.view addGestureRecognizer:panRecognizer];//关键语句,给self.view添加一个手势监测;  
  7.  panRecognizer.maximumNumberOfTouches = 1;  
  8.  panRecognizer.delegate = self;  
  9.  [panRecognizer release];  
  10. }  

其它手势方法类似。

 

其核心就是设置delegate和在需要手势监测的view上使用addGestureRecognizer添加指定的手势监测。

当然要记得在作为delegate的view的头文件加上<UIGestureRecognizerDelegate>。

不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。

手势识别是具有互斥的原则的比如单击和双击,如果它识别出一种手势,其后的手势将不被识别。所以对于关联手势,要做特殊处理以帮助程序甄别,应该把当前手势归结到哪一类手势里面。

比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要做一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。使用

[A requireGestureRecognizerToFail:B]函数,它可以指定当A手势发生时,即便A已经滿足条件了,也不会立刻触发会等到指定的手势B确定失败之后才触发。

 

  1. - (void)viewDidLoad   
  2. {  
  3.     // 单击的 Recognizer  
  4.     UITapGestureRecognizer* singleRecognizer;  
  5.     singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];  
  6.     //点击的次数  
  7.     singleTapRecognizer.numberOfTapsRequired = 1; // 单击  
  8.   
  9.     //给self.view添加一个手势监测;  
  10.   
  11.   [self.view addGestureRecognizer:singleRecognizer];  
  12.   
  13.     
  14.     // 双击的 Recognizer  
  15.     UITapGestureRecognizer* double;  
  16.     doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];  
  17.     doubleTapRecognizer.numberOfTapsRequired = 2; // 双击  
  18.     //关键语句,给self.view添加一个手势监测;  
  19.     [self.view addGestureRecognizer:doubleRecognizer];  
  20.       
  21.     // 关键在这一行,双击手势确定监测失败才会触发单击手势的相应操作  
  22.     [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];  
  23.     [singleRecognizer release];  
  24.     [doubleRecognizer release];  
  25. }  
  26.   
  27. -(void)SingleTap:(UITapGestureRecognizer*)recognizer  
  28. {  
  29. //处理单击操作  
  30. }  
  31.   
  32. -(void)DoubleTap:(UITapGestureRecognizer*)recognizer  
  33. {  
  34. //处理双击操作  
  35. }  

三、iphone操作手势的大概种类

1.点击(Tap)
点击作为最常用手势,用于按下或选择一个控件或条目(类似于普通的鼠标点击)、

2.拖动(Drag)
拖动用于实现一些页面的滚动,以及对控件的移动功能。

3.滑动(Flick)
滑动用于实现页面的快速滚动和翻页的功能。

4.横扫(Swipe)
横扫手势用于激活列表项的快捷操作菜单

5.双击(Double Tap)
双击放大并居中显示图片,或恢复原大小(如果当前已经放大)。同时,双击能够激活针对文字编辑菜单。

6.放大(Pinch open)
放大手势可以实现以下功能:打开订阅源,打开文章的详情。在照片查看的时候,放大手势也可实现放大图片的功能。

7.缩小(Pinch close)
缩小手势,可以实现与放大手势相反且对应的功能的功能:关闭订阅源退出到首页,关闭文章退出至索引页。在照片查看的时候,缩小手势也可实现缩小图片的功能。

8.长按(Touch &Hold)
在我的订阅页,长按订阅源将自动进入编辑模式,同时选中手指当前按下的订阅源。这时可直接拖动订阅源移动位置。
针对文字长按,将出现放大镜辅助功能。松开后,则出现编辑菜单。
针对图片长按,将出现编辑菜单。

9.摇晃(Shake)
摇晃手势,将出现撤销与重做菜单。主要是针对用户文本输入的。

 

分享到:
评论

相关推荐

    ios的手势操作之UIGestureRecognizer浅析(推荐)

    在iOS开发中,手势操作是用户界面交互的重要组成部分。`UIGestureRecognizer`是Apple提供的一套框架,使得开发者能够轻松地识别和响应多种触摸屏幕的行为。这篇文章将对`UIGestureRecognizer`进行深入浅析,帮助你...

    IOS中各种手势操作实例代码

    IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1、点击 UITapGestureRecognizer 2、平移 UIPanGestureRecognizer 3、缩放 UIPinchGestureRecognizer 4、旋转...

    ios手势操作演示

    本项目"ios手势操作演示"是一个使用Swift编写的示例,旨在帮助开发者理解和应用iOS中的手势识别技术。 Swift是Apple为iOS、macOS、watchOS和tvOS平台推出的一种强大且易学的编程语言,它具有现代编程语言的特点,如...

    ios-长按手势自定义复制功能.zip

    在iOS开发中,手势交互是用户体验的重要组成部分,特别是在移动设备上。`ios-长按手势自定义复制功能.zip`这个压缩包文件显然包含了关于如何在iOS应用中实现长按手势以提供复制功能的相关代码示例。我们将深入探讨这...

    ios开发中手势多点触控实现

    本知识点将深入讲解如何在iOS应用中实现多点触控功能,主要涉及`UIGestureRecognizer`手势识别器和`touchesMoved`方法。 首先,`UIGestureRecognizer`是iOS SDK提供的一种抽象类,用于识别不同的触摸手势,如轻拍...

    ios 图片增加手势

    本文将详细讲解如何在iOS应用中实现图片的手势操作,包括单击全屏显示、双击放大缩小以及捏合手势操作。 首先,我们需要引入UIKit框架,这个框架包含了处理用户界面和手势识别的所有基本组件。在你的Swift文件顶部...

    ios-将系统返回手势拦截到自定义手势上(全屏返回).zip

    默认情况下,iOS中的UINavigationController提供了一个滑动手势,当用户从屏幕左侧边缘向右滑动时,这个手势会触发导航栈的pop操作,即返回上一个视图控制器。这个手势是由UINavigationController内部的一个...

    ios-最新手势滑动返回,最新效果.zip

    1. **UIGestureRecognizer**:这是iOS SDK中处理用户手势的类,如轻触、滑动、旋转等。在这个场景中,我们通常会使用UISwipeGestureRecognizer,它可以识别用户向左或向右的滑动手势。 2. **UINavigationController...

    ios系列设备手势操作插件(含注册机 )-quickdo v3.6.1

    QuickDo是一款专为iOS设备设计的强大手势操作插件,它极大地提升了用户在iPhone或iPad上的交互体验。在iOS系统默认的基础上,QuickDo提供了更多自定义的可能性,让用户可以通过各种手势执行不同的命令,使得设备操作...

    iOS TableView 添加手势方法

    本篇文章将详细讲解如何在iOS的TableView中添加手势以及解决手势与TableView默认行为冲突的问题。 首先,为了在TableView的空白区域添加手势,我们需要创建一个`UITapGestureRecognizer`实例,并将其添加到...

    Unity3D 游戏引擎之IOS触摸屏手势控制镜头旋转与缩放

    雨松MOMO Unity3D 游戏开发系列博文之Unity3D 游戏引擎之IOS触摸屏手势控制镜头旋转与缩放,欢迎大家下载阅读,哇咔咔~~

    IOS_5手势识别教程:二指拨动、拖移以及更多手势 pdf

    在iOS_5中,UIGestureRecognizer类的子类涵盖了各种常用的手势,如UIPanGestureRecognizer(用于拖移操作)、UIPinchGestureRecognizer(用于二指缩放操作)、UIGestureRecognizer(用于旋转操作)等。 #### 实现...

    iOS 开发 手势与触摸事件

    在iOS开发中,手势识别(Gesture Recognizers)和触摸事件(Touch Events)是构建用户交互界面不可或缺的部分。这些技术使得应用程序能够对用户的屏幕操作做出响应,从而提供更加自然和直观的用户体验。本教程将深入...

    ios-触摸任何位置手势返回框架.zip

    联系QQ: 712641411 开发作者: 吴海超 iOS技术交流群: 302157745 轻量级手势返回框架(简单,高效) ...ViewController * rootVC = .../// 该rootNV 队列下所有VC控制器都将支持自定义触摸手势返回Pop操作

    ios-pop手势 全屏滑动,自定义导航.zip

    在iOS开发中,导航(Navigation)是用户界面设计的关键元素之一,它负责引导用户在应用的不同层级间自由切换。此压缩包"ios-pop手势 全屏滑动,自定义导航.zip"显然关注的是如何实现一个全屏滑动手势来驱动自定义...

    仿IOS界面手势切换

    "仿iOS界面手势切换"是一个Android项目,它实现了类似于iOS中的侧滑返回功能,让Android用户也能享受到类似iOS的流畅操作体验。这个项目名为"AndroidResideMenu-master",下面将详细介绍其主要知识点。 1. **侧滑...

    ios-触摸手势 - demo.zip

    在iOS开发中,触摸手势(Touch Gestures)是构建用户界面不可或缺的一部分,它们使得应用程序能够对用户的触摸操作做出响应,提供了丰富的交互体验。本Demo旨在详细介绍并演示了iOS中的主要触摸手势,帮助开发者深入...

    ios仿照支付宝的手势解锁

    在iOS开发中,实现类似支付宝的手势解锁功能是一项常见的需求,它可以为用户提供便捷且安全的解锁方式。这个功能的核心在于创建一个自定义视图,该视图能够检测用户的手势路径,并与预设的解锁模式进行匹配。接下来...

    ios-左滑手势push控制器.zip

    在iOS开发中,手势识别(Gesture Recognizer)是构建用户友好、交互丰富的应用程序的重要组成部分。本项目"ios-左滑手势push控制器.zip"主要关注如何通过屏幕左侧滑动手势来推动(push)新的UIViewController,实现...

    iOS手势集合

    - 开发者可以通过继承`UIGestureRecognizer`类来自定义手势,实现特定的操作逻辑。例如,可以创建一个检测特定轨迹的手势,或者组合多个基本手势来实现更复杂的交互。 4. 手势冲突解决: - 当多个手势同时识别到...

Global site tag (gtag.js) - Google Analytics