zoukankan      html  css  js  c++  java
  • ios的手势操作之UIGestureRecognizer浅析

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

    [-]

    1. 一、概述
    2. 二、UIGestureRecognizer
    3. 三、iphone操作手势的大概种类

    一、概述

    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)
    摇晃手势,将出现撤销与重做菜单。主要是针对用户文本输入的。




  • 相关阅读:
    帝国 标签模板 使用程序代码 去除html标记 并 截取字符串
    iis6 伪静态 iis配置方法 【图解】
    您来自的链接不存在 帝国CMS
    帝国cms Warning: Cannot modify header information headers already sent by...错误【解决方法】
    .fr域名注册 51元注册.fr域名
    帝国网站管理系统 恢复栏目目录 建立目录不成功!请检查目录权限 Godaddy Windows 主机
    星外虚拟主机管理平台 开通数据库 出现Microsoft OLE DB Provider for SQL Server 错误 '8004' 从字符串向 datetime 转换失败
    ASP.NET 自定义控件学习研究
    CSS层叠样式表之CSS解析机制的优先级
    ASP.NET程序员工作面试网络收藏夹
  • 原文地址:https://www.cnblogs.com/jackljf/p/3589302.html
Copyright © 2011-2022 走看看