`
liubo0_0
  • 浏览: 21808 次
社区版块
存档分类
最新评论

iOS Programming – 触摸事件处理(2)

 
阅读更多
在上一篇《iOS Programming – 触摸事件处理(1)》中了解触摸、事件和响应者之后,接下去学习如何处理用户的触摸事件。首先触摸的对象是视图,而视图的类UIView继承了UIRespnder类,但是要对事件作出处理,还需要重写UIResponder类中定义的事件处理函数。根据不通的触摸状态,程序会调用相应的处理函数,这些函数包括以下几个:

-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event;

-(void)touchesMoved:(NSSet*)touches withEvent:(UIEvent *)event;

-(void)touchesEnded:(NSSet *)toucheswithEvent:(UIEvent *)event;

-(void)touchesCancelled:(NSSet *)toucheswithEvent:(UIEvent *)event;

当手指接触屏幕时,就会调用touchesBegan:withEvent方法;

当手指在屏幕上移时,动就会调用touchesMoved:withEvent方法;

当手指离开屏幕时,就会调用touchesEnded:withEvent方法;

当触摸被取消(比如触摸过程中被来电打断),就会调用touchesCancelled:withEvent方法。而这几个方法被调用时,正好对应了UITouch类中phase属性的4个枚举值。

上面的四个事件方法,在开发过程中并不要求全部实现,可以根据需要重写特定的方法。对于这4个方法,都有两个相同的参数:NSSet类型的touches和UIEvent类型的event。其中touches表示触摸产生的所有UITouch对象,而event表示特定的事件。因为UIEvent包含了整个触摸过程中所有的触摸对象,因此可以调用allTouches方法获取该事件内所有的触摸对象,也可以调用touchesForVIew:或者touchesForWindows:取出特定视图或者窗口上的触摸对象。在这几个事件中,都可以拿到触摸对象,然后根据其位置,状态,时间属性做逻辑处理。

例如:

-(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event
{
UITouch*touch=[touchesanyObject];
if(touch.tapCount==2)
{
self.view.backgroundColor=[UIColorredColor];
}
}

上面的例子说明在触摸手指离开后,根据tapCount点击的次数来设置当前视图的背景色。不管时一个手指还是多个手指,轻击操作都会使每个触摸对象的tapCount加1,由于上面的例子不需要知道具体触摸对象的位置或时间等,因此可以直接调用touches的anyObject方法来获取任意一个触摸对象然后判断其tapCount的值即可。

检测tapCount可以放在touchesBegan也可以touchesEnded,不过一般后者跟准确,因为touchesEnded可以保证所有的手指都已经离开屏幕,这样就不会把轻击动作和按下拖动等动作混淆。

轻击操作很容易引起歧义,比如当用户点了一次之后,并不知道用户是想单击还是只是双击的一部分,或者点了两次之后并不知道用户是想双击还是继续点击。为了解决这个问题,一般可以使用“延迟调用”函数。

例如:

-(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event
{
UITouch*touch=[touchesanyObject];
if(touch.tapCount==1)
{
[selfperformSelector:@selector(setBackground:)withObject:[UIColorblueColor]afterDelay:2];
self.view.backgroundColor=[UIColorredColor];
}
}

上面代码表示在第一次轻击之后,没有直接更改视图的背景属性,而是通过performSelector:withObject:afterDelay:方法设置2秒中后更改。

-(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event
{
UITouch*touch=[touchesanyObject];
if(touch.tapCount==2)
{
[NSObjectcancelPreviousPerformRequestsWithTarget:selfselector:@selector(setBackground:)object:[UIColorredColor]];
self.view.backgroundColor=[UIColorredColor];
}
}

双击就是两次单击的组合,因此在第一次点击的时候,设置背景色的方法已经启动,在检测到双击的时候先要把先前对应的方法取消掉,可以通过调用NSObject类的cancelPreviousPerformRequestWithTarget:selector:object方法取消指定对象的方法调用,然后调用双击对应的方法设置背景色为红色。

下面举个例子创建可以拖动的视图,这个主要通过触摸对象的位置坐标来实现。因此调用触摸对象的locationInView:方法即可。

例如:

CGPointoriginalLocation;
-(void)touchesBegan:(NSSet*)toucheswithEvent:(UIEvent*)event
{
UITouch*touch=[touchesanyObject];
originalLocation=[touchlocationInView:self.view];
}

-(void)touchesMoved:(NSSet*)toucheswithEvent:(UIEvent*)event
{
UITouch*touch=[touchesanyObject];
CGPointcurrentLocation=[touchlocationInView:self.view];
CGRectframe=self.view.frame;
frame.origin.x+=currentLocation.x-originalLocation.x;
frame.origin.y+=currentLocation.y-originalLocation.y;
self.view.frame=frame;
}

这里先在touchesBegan中通过[touch locationInView:self.view]获取手指触摸在当前视图上的位置,用CGPoint变量记录,然后在手指移动事件touchesMoved方法中获取触摸对象当前位置,并通过于与原始位置的差值计算出移动偏移量,再设置当前视图的位置。


转自:http://www.cnblogs.com/spiritstudio/archive/2011/05/26/2059352.html


分享到:
评论

相关推荐

    IOS触摸事件

    本文将深入探讨iOS中的触摸事件处理机制,并通过提及的几个示例项目来阐述如何利用这些机制实现丰富的交互效果。 首先,我们要理解iOS中的基本触摸事件类型。主要有以下几种: 1. `UIEvent`:这是所有触摸事件的...

    IOS 开发之触摸事件详细介绍

    在iOS开发中,触摸事件是用户与应用交互的基础,它涉及到UIResponder对象的事件处理机制。本文将深入探讨iOS中的触摸事件,以及如何在应用程序中有效地响应这些事件。 首先,我们要了解iOS中的事件类型,主要分为三...

    iOS Programming 6th

    iOS Programming 6th big nerd ranch

    Beginning ios programming with Swift-1

    Beginning ios programming with Swift xcode8 and ios10 1. Preface 2. GettingStartedwithXcode8Development 3. SwiftPlaygrounds 4. BuildYourFirstApp 5. HelloWorldAppExplained 6. IntroductiontoAutoLayout 7...

    iOS Programming The Big Nerd Ranch Guide 4th Edition.pdf.part1

    iOS Programming The Big Nerd Ranch Guide 4th Edition.pdf 英文最新版,电子档 第一部分

    IOS 11 Programming Fundamentals with Swift

    1. 书名:《IOS 11 Programming Fundamentals with Swift》是关于iOS 11操作系统下,使用Swift编程语言进行编程基础教学的一本书籍。这本书由Matt Neuburg编写,是该书的第四版。 2. 描述:该书在***上可以购买,...

    iOS 开发 手势与触摸事件

    本教程将深入探讨iOS中的手势识别和触摸事件处理机制。 一、触摸事件 1. 触摸事件的基本流程: iOS设备上的触摸事件通常分为四个阶段:began、moved、stationary和ended。当用户手指首次接触屏幕时触发`...

    iOS触摸和简单实现

    在iOS开发中,触摸事件处理是用户界面交互的基础。这个"iOS触摸和简单实现"的示例项目,通过一个简单的工程展示了如何在应用中监听和响应用户的触摸操作。在这个项目中,我们有一个视图,视图内包含一个可拖动位置的...

    IOS应用源码之ios触摸事件例子全集.rar

    这个压缩包"IOS应用源码之ios触摸事件例子全集.rar"显然是一个包含了各种iOS触摸事件处理的代码示例集合,对于学习iOS开发尤其是事件处理部分非常有帮助。以下将详细讲解iOS中的触摸事件及其相关知识点。 首先,iOS...

    iOS Programming: The Big Nerd Ranch Guide (6th Edition, 2017)

    iOS Programming: The Big Nerd Ranch Guide (6th Edition) (Big Nerd Ranch Guides) 6th Edition English | 1 Jan. 2017 | ISBN: 0134682335 | 416 Pages | AZW3/MOBI/EPUB/PDF (conv) | 44.19 MB by Christian ...

    (iOS14)2021Beginning iOS Programming with Swift

    《(iOS14)2021 Beginning iOS Programming with Swift》是针对苹果最新操作系统iOS14及iPadOS14的Swift编程入门教程。这本教程旨在帮助初学者掌握使用Swift语言构建高质量、功能丰富的iOS和iPad应用的核心技能。 ...

    IOS源码应用Demo-ios触摸事件例子全集.zip

    本资源“IOS源码应用Demo-ios触摸事件例子全集.zip”提供了一系列的示例,帮助开发者深入理解并掌握iOS中的触摸事件处理。下面我们将详细探讨这些知识点。 首先,iOS中的触摸事件主要由`UIResponder`协议处理,该...

    《iOS Programming(6th.Edition)》The Big Nerd Ranch Guide. 6th.Edition 第6版,英文原版

    《iOS Programming(6th Edition)》The Big Nerd Ranch Guide是iOS开发领域的经典教程,第六版更新了最新的技术和最佳实践。这本书专为那些希望深入理解iOS应用开发的开发者设计,涵盖了Swift编程语言、UIKit框架...

    ios UIScrollView响应touch事件

    在iOS开发中,UIScrollView是一个非常重要的控件,它允许用户通过滚动来查看超过屏幕大小的内容。...通过熟练运用`UIScrollView`的触摸事件处理机制,开发者可以创建出更加自然、用户友好的iOS应用。

    IOS事件处理机制 中文

    IOS 事件处理机制详解 IOS 事件处理机制是 IOS 系统中的一种机制,用于处理用户与设备的交互操作。该机制主要包括事件类型、事件触发机制、事件传递等几个方面。 事件类型 IOS 中的事件类型主要有三种:点击事件、...

    IOS应用源码——ios触摸事件例子全集.zip

    【iOS应用源码——iOS触摸事件例子全集.zip】是一个包含iOS开发中关于触摸事件处理的源码集合,主要适用于iOS平台,对于开发者来说,这是一个深入理解和实践iOS触摸事件处理的宝贵资源。在这个压缩包中,我们可以...

    iOSProgramming4ed

    《iOS编程第四版》是iOS应用开发领域的一本权威书籍,专为那些希望深入学习iOS开发的程序员设计。这本书基于Xcode 5和iOS 7系统,因此所有的代码示例和素材都与这两个版本紧密相关。Xcode 5是苹果公司推出的集成开发...

Global site tag (gtag.js) - Google Analytics