`
iaiai
  • 浏览: 2196231 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ios的手势操作之UIGestureRecognizer浅析

 
阅读更多
一、概述
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,看官方文档):
  • UITapGestureRecognizer
  • UIPinchGestureRecognizer
  • UIRotationGestureRecognizer
  • UISwipeGestureRecognizer
  • UIPanGestureRecognizer
  • UILongPressGestureRecognizer

从名字上我们就能知道, Tap(点击)、Pinch(捏合)、Rotation(旋转)、Swipe(滑动,快速移动,是用于监测滑动的方向的)、Pan (拖移,慢速移动,是用于监测偏移的量的)以及 LongPress(长按)。
举个例子,可以在viewDidLoad函数里面添加:
-(void) viewDidLoad  {  
 [super viewDidLoad];  
 // Do any additional setup after loading the view from its nib.  
 UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];  
 [self.view addGestureRecognizer:panRecognizer];//关键语句,给self.view添加一个手势监测;  
 panRecognizer.maximumNumberOfTouches = 1;  
 panRecognizer.delegate = self;  
 [panRecognizer release];  
}

其它手势方法类似。
其核心就是设置delegate和在需要手势监测的view上使用addGestureRecognizer添加指定的手势监测。
当然要记得在作为delegate的view的头文件加上<UIGestureRecognizerDelegate>。
不过有些手势是关联的,怎么办呢?例如 Tap 与 LongPress、Swipe与 Pan,或是 Tap 一次与Tap 兩次。
手势识别是具有互斥的原则的,比如单击和双击,如果它识别出一种手势,其后的手势将不被识别。所以对于关联手势,要做特殊处理以帮助程序甄别,应该把当前手势归结到哪一类手势里面。
比如,单击和双击并存时,如果不做处理,它就只能发送出单击的消息。为了能够识别出双击手势,就需要做一个特殊处理逻辑,即先判断手势是否是双击,在双击失效的情况下作为单击手势处理。使用
[A requireGestureRecognizerToFail:B]函数,它可以指定当A手势发生时,即便A已经滿足条件了,也不会立刻触发,会等到指定的手势B确定失败之后才触发。
- (void)viewDidLoad   
{  
    // 单击的 Recognizer  
    UITapGestureRecognizer* singleRecognizer;  
    singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];  
    //点击的次数  
    singleTapRecognizer.numberOfTapsRequired = 1; // 单击  
  
    //给self.view添加一个手势监测;  
  
  [self.view addGestureRecognizer:singleRecognizer];  
  
    
    // 双击的 Recognizer  
    UITapGestureRecognizer* doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];  
    doubleRecognizer.numberOfTapsRequired = 2; // 双击  
    //关键语句,给self.view添加一个手势监测;  
    [self.view addGestureRecognizer:doubleRecognizer];  
      
    // 关键在这一行,双击手势确定监测失败才会触发单击手势的相应操作  
    [singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];  
    [singleRecognizer release];  
    [doubleRecognizer release];  
}  
  
-(void)SingleTap:(UITapGestureRecognizer*)recognizer  
{  
//处理单击操作  
}  
  
-(void)DoubleTap:(UITapGestureRecognizer*)recognizer  
{  
//处理双击操作  
}


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

    iOS手势集合

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

    IOS手势解锁

    在iOS操作系统中,手势解锁是一种安全且直观的设备解锁方式,它允许用户通过在触摸屏上绘制特定的图案来解锁设备。本文将深入探讨iOS手势解锁的功能、工作原理以及如何实现这一功能。 ### 一、手势解锁的概念 手势...

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

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

    iOS手势(全)

    在iOS平台上,手势是用户与设备交互的重要方式,它们提供了直观、自然的界面操作体验。以下是对iOS中主要手势的详细解析: 1. **轻拍(Tap)**: 轻拍是最基本的手势,通常用于选择或激活某个元素。用户只需短暂地...

    iOS实现手势解锁操作

    iOS手势解锁是一种便捷的用户身份验证方式,它允许用户通过在屏幕上画出特定的图案来解锁设备或执行某些操作。这种功能常见于许多智能手机和平板电脑,提供了直观且个性化的安全保护。在iOS开发中,我们可以利用手势...

    IOS应用源码之IOS手势滑动截屏.zip

    在iOS平台上,手势滑动截屏是一种非常实用的功能,它允许用户通过简单的手势操作来捕捉屏幕内容。这个“iOS应用源码之iOS手势滑动截屏”压缩包中包含的资源,显然是一份用于实现这一功能的源代码。这份源码可以帮助...

    仿IOS界面手势切换

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

    ios手势 动画操作 蓝牙

    在压缩包中的“ios各种手势操作”文件,很可能是包含了一系列示例代码,涵盖了上述的手势识别和动画操作。通过学习和实践这些代码,开发者可以更深入地了解这些技术,并提升自己的编程技能。如果你已经具备一定的iOS...

    ios手势程序

    在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。这些手势让应用程序能够理解用户的触摸动作,并相应地执行相应的操作。在这个"ios手势程序"中,我们将会探讨以下几个基本的手势...

    ios手势图形解锁完整Demo

    在iOS开发中,手势图形解锁是一种常见的用户身份验证方式,它允许用户通过绘制特定的图形路径来解锁设备或应用,增强了用户体验和安全性。本Demo,"ios手势图形解锁完整Demo",提供了一个实现这一功能的实例,使得...

    ios手势的用法

    iOS中各种手势的详细用法,包括冲突手势的区分

    ios 手势右滑视觉差 效果类似微信QQ等返回操作

    1. **自定义手势识别**:通过继承`UIGestureRecognizer`或者使用`UIPanGestureRecognizer`,来识别并处理用户的手势操作,特别是右滑手势。 2. **视图控制器的堆栈管理**:在用户滑动过程中,需要正确地管理视图控制...

    ios手势代码demo大全

    ios 手势代码 demo 大全 ios手势代码demo大全

    ios手势相关资料

    1. **UIGestureRecognizer**: 这是iOS中的主要手势类,它提供了一个框架,用于识别并响应各种触摸事件。UIGestureRecognizer有多种子类,如UIPanGestureRecognizer(拖动)、UIPinchGestureRecognizer(捏合缩放)、...

    iOS手势旋转缩放拖拽图片

    在iOS SDK中,`UIGestureRecognizer` 是所有手势识别类的基类,其中包括常见的 `UIPanGestureRecognizer`(用于拖动)、`UIPinchGestureRecognizer`(用于缩放)和`UIRotationGestureRecognizer`(用于旋转)。...

    ios拖动手势展开菜单栏

    在iOS应用开发中,手势交互是提升用户体验的关键因素之一,特别是在构建主流APP结构时。"ios拖动手势展开菜单栏"这一主题,涉及到的核心知识点主要包括iOS的手势识别、APP界面设计以及侧滑菜单的实现。 首先,我们...

    iOS手势返回上一级

    在iOS操作系统中,手势返回上一级是用户界面交互的一个重要组成部分,它提供了高效且直观的导航方式。这一特性使得用户无需依赖屏幕上的物理或虚拟按键就能轻松返回到上一个视图控制器。本篇文章将深入探讨iOS中的...

    ios 常见手势

    这种手势通常用于执行一些需要更多确认或更复杂的操作,比如在地图应用中选择一个位置,或者在照片应用中预览图片。 **实现长按手势:** ```swift let longPressGesture = UILongPressGestureRecognizer(target: ...

Global site tag (gtag.js) - Google Analytics