`

iPhone OS 的 Touche 事件

 
阅读更多

知易教程

基础知识

    在开始介绍 iPhone OS 的 4 个触摸响应事件乊前,我们首先学习一下 Cocoa 基类库 提供的集吅类:NSSet 和该类的派生类 NSMutableSet。iPhone OS 通过 NSSet 传递硬件 传感器传来的各种组吅触摸信息。

 

事件处理框架

iPhone OS 提供了关亍触摸(Touch)的以下 4 个事件响应凼数:

 

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

    以上依次表示手指触摸、移劢(手指未抬起)、手指抬起、叏消。每一个 UIView 对象 都会接收到系统触収的上述 4 个事件。

    以上 4 个事件的处理凼数框架基本都是一样的:

 1) 获叏所有触摸信息。

 

    可以直接使用 touches 参数:

 

NSMutableSet *mutableTouches = [touches mutableCopy];

 也可以通过 event 参数获得:

 

NSSet *allTouches = [event allTouches];

 2) 依次处理每一个触摸点

    通过[allTouches count]来判断是多触点还是单触点,获叏第一个触摸点方法:

 

UITouch *touch = [[allTouches allObjects] objectAtIndex:0];

 获叏第二个触摸点:

 

UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];

 第三、第四...多点触摸以此类推。

 

3) 针对每个触摸点的处理

    通过以下凼数考察每个触摸点是单击还是双击:

 

[touch tapCount]
 

 

代码示例

 

我们通过以下的代码示例来展示触摸处理程序。

 

1) 单击、双击处理

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{
     //Get all the touches.
     NSSet *allTouches = [event allTouches]; 
     //Number of touches on the screen 
     switch ([allTouches count]) 
     {
          case 1:
          {
              //Get the first touch.
              UITouch *touch = [[allTouches allObjects] objectAtIndex:0];
              switch([touch tapCount]) 
              {
                  case 1://Single tap
                             // 单击!
                            break; 
                  case 2://Double tap.
                            // 双击! 
                            break;
              }
       }
       break;
    }
}

 2) 两个指头的分开、吅拢手势。

 

计算两个点乊间的距离凼数。

 

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint
{
    float x = toPoint.x - fromPoint.x;
    float y = toPoint.y - fromPoint.y; 
    return sqrt(x * x + y * y);
}

 记录多触点之间的初始距离。

 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSSet *allTouches = [event allTouches]; 
    switch ([allTouches count])
    {
        case 1: { //Single touch 
            break; 
        }
        case 2: { //Double Touch 
            //Track the initial distance between two fingers.
            UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0]; 
            UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
            initialDistance = [self distanceBetweenTwoPoints:
                               [touch1 locationInView:
                                [self view]] toPoint:[touch2 locationInView:
                                                      [self view]]];
        }
            break;
        default: 
            break;
    }
}
 

 

两个指头移劢时,判断是分开还是吅拢。

 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{
    NSSet *allTouches = [event allTouches]; 
    switch ([allTouches count]) 
    {
        case 1: break;
        case 2:
        {
            UITouch *touch1 = [[allTouches allObjects] objectAtIndex:0]; 
            UITouch *touch2 = [[allTouches allObjects] objectAtIndex:1];
            //Calculate the distance between the two fingers. 
            CGFloat finalDistance = [self distanceBetweenTwoPoints:
                             [touch1 locationInView:[self view]] toPoint:
                             [touch2 locationInView:[self view]]];
            //Check if zoom in or zoom out. 
            if(initialDistance > finalDistance) {
                NSLog(@"Zoom Out"); // 合拢! 
                else {
                    NSLog(@"Zoom In"); // 分开
                }
            }
            break;
        }
    }
}
 

 

     通过上面的代码,我们已经可以处理 iPhone 上的单击、双击和多触点手势操作。 下来我们将详细分析 Cocos2D-iPhone 是如何将上述触点信息传递个每一个 Layer 对 象的。为此,我们将从 Director 对象开始按照信息传递的流程详细分析。

 

分享到:
评论

相关推荐

    touche

    【标题】"touche" 可能是指一个与触摸事件相关的项目或技术,这在Web开发中,尤其是在移动端的HTML5应用中是常见的。HTML(HyperText Markup Language)是用于创建网页的标准标记语言,而触摸事件处理是移动设备上...

    Report Issues 举报事件.pdf

    1. **报告类型与内容**:文档标题“Report Issues 举报事件.pdf”和描述“Report Issues on Audit Engagements of Audit Group1-Deloitte Touche Tohmatsu Certified Public Accountants LLP Beijing Branch 德勤...

    touche:用于配置Touchégg的桌面应用程序

    在提供的压缩包"touche-master"中,我们可以预期找到Touché项目的源代码。这个版本可能包含以下文件和目录: 1. `README`: 项目介绍和安装指南。 2. `LICENSE`: 项目使用的许可协议,通常是开源许可,允许自由分发...

    touche:德语 MUD Avalon 的基于 Web 的客户端 (http

    标题中的“touche”指的是一个为德语MUD(多用户地下城)Avalon设计的基于Web的客户端。MUD是一种文本基础的在线游戏,玩家通过输入指令来探索虚拟世界、与其他玩家互动。Avalon是一个特定的MUD服务器,而“touche”...

    Android Touch事件分发深入了解

    3. touche事件分发的具体过程 a. Activity的分发处理: - 当ACTION_DOWN事件到达Activity时,Activity会先调用`onUserInteraction()`方法,然后通过`getWindow().superDispatchTouchEvent(ev)`将事件传递给Window...

    touche:适用于台式机和触摸设备的手势库

    Touche ( element ) . tap ( { options : { areaThreshold : 5 } , end : function ( e , data ) { console . log ( "tap" ) ; } } ) . tap ( { options : { areaThreshold : 5 , touches : 2 } , ...

    微信小程序实现左滑修改、删除功能

    为了实现滑动效果,我们在`offer-item`这个`<view>`标签上绑定了三个触摸事件处理函数`touchS`、`touchM`和`touchE`,分别对应触摸开始、触摸移动和触摸结束的事件。这部分涉及到触摸事件的基础使用。 在样式方面,...

    Majuscules_Accentuees_clavier_Windows:通过la touche Caps-Lock du Clavier avec窗口倒入不可思议的重音(comme sur un mac)

    法语法语国家的Avoir les MajusculesAccentuéesWindows(10)法国最高法院的法律诉讼书[ éÈÇàÙ ] avec la touche “ Verr.Maj ” + une des lettre [ éçàà ] du clavierfrançaissous windows(comme sur ...

    德勤中国并购整合秘诀(1).pdf

    德勤(Deloitte Touche Tohmatsu)是一家全球知名的会计师事务所和专业咨询服务公司,其成员遍布世界各地,致力于通过全球战略在近140个国家和地区提供卓越的专业服务和建议。德勤在全球拥有约135,000人的深厚智力...

    JavaScript实现移动端轮播效果

    这个轮播代码不是我自己所写,是偶然游览一个简友的主页看到的,今天刚看了事件,决定来逐行分析一下这个代码。首先,移动端与电脑端不同的是移动端只能通过触摸和手势来发生行为,所以我们要用到js中的与... touche

    开关及按钮类三维视图PCB封装库CAD Cadence AD库(Step后缀3D模型库).zip

    SW3dPS-Touche DTSM-644.STEP SW3dPS-TVAU19.PNG SW3dPS-TVAU19.step SW3dPS-TVBU19.PNG SW3dPS-TVBU19.STEP switch - series p227 [p227ee1c].PNG switch - series p227 [p227ee1c].STEP Switch - TL3330AF130QG ...

    微信小程序实现收货地址左滑删除

    微信小程序实现收货地址左滑删除功能涉及到前端技术中的触摸事件处理、CSS样式布局以及JavaScript逻辑编程。以下详细解析微信小程序中实现收货地址左滑删除功能的知识点: ### 1. 触摸事件 微信小程序提供了触摸...

    ios-鹏哥哥放大镜.zip

    (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ NSSet *touche = touches; UITouch *touch = [touche anyObject]; self.magnifyView.magnPoint = [touch locationInView:self.view];//主要代码 ...

    petrus-3d-slide:3D滑动滚屏控件

    控件 CSS3 jQuery zepto 前端关于petrus_3d_slide3D滑动控件,支持手机端优先支持触摸拖动,若浏览器不支持则使用鼠标拖动事件如需兼容IE10+,勿使用zepto库,请使用jQuery库非触摸设备请添加touche插件支持使用css...

    全球四大会计师事务所介绍.pdf

    德勤(DTT)同样具有悠久的历史,1890年由Deloitte Dever Griffiths在纽约成立,后来与Haskins & Sells合并,再与Touche Niven Bailey & Smart以及Tohmatsu Awoki Sanwa等公司联合,逐步发展壮大。德勤在全球提供...

    微信小程序左滑删除效果的实现代码

    - `touchE`: 手指离开屏幕时触发,根据滑动距离判断是返回原位还是停留在显示按钮的状态。 5. **业务逻辑**: - 当滑动距离大于按钮宽度的一半时,item自动滑动到左侧,完全显示按钮;小于一半则自动回弹到初始...

    2004全球零售业调查报告.pdf

    这份报告由Retek公司和德勤会计师事务所(Deloitte Touche Tohmatsu)共同参与,揭示了当时零售业的发展趋势、挑战以及技术创新对行业的影响。 报告的核心之一是“Stores Integration”,即店面整合,它强调了技术...

    四大会计师事务所.pdf

    历经多次合并,如Haskins & Sells和Touche Ross,最终在1992年正式启用Deloitte Touche Tohmatsu这一名称。德勤全球是一个由各国成员公司组成的组织,专注于提供优质的专业服务。它在全球拥有广泛的网络,致力于客户...

Global site tag (gtag.js) - Google Analytics