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

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

 
阅读更多

iphone/ipad键盘设计是为屏幕争取更多的显示空间,大屏幕在观看图片、文字、视频等方面为用户带来了更好的用户体验。而触摸屏幕是iOS设备接受用户输入的主要方式,包括单击、双击、拨动以及多点触摸等,这些操作都会产生触摸事件。

在Cocoa中,代表触摸对象的类是UITouch。当用户触摸屏幕后,就会产生相应的事件,所有相关的UITouch对象都被包装在事件中,被程序交由特定的对象来处理。UITouch对象直接包括触摸的详细信息。

UITouch类中包含5个属性:

window:触摸产生时所处的窗口。由于窗口可能发生变化,当前所在的窗口不一定是最开始的窗口。
view:触摸产生时所处的视图。由于视图可能发生变化,当前视图也不一定时最初的视图。
tapCount:轻击(Tap)操作和鼠标的单击操作类似,tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判断单击、双击或更多的轻击。
timestamp:时间戳记录了触摸事件产生或变化时的时间。单位是秒。
phase:触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。而通过phase可以查看当前触摸事件在一个周期中所处的状态。phase是UITouchPhase类型的,这是一个枚举配型,包含了

· UITouchPhaseBegan(触摸开始)

· UITouchPhaseMoved(接触点移动)

· UITouchPhaseStationary(接触点无移动)

· UITouchPhaseEnded(触摸结束)

· UITouchPhaseCancelled(触摸取消)

UITouch类中包含如下成员函数:

- (CGPoint)locationInView:(UIView *)view函数返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。

- (CGPoint)previousLocationInView:(UIView *)view该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值, 表示触摸在view这个视图上的位置,这里返回的位置是针对view的坐标系的。调用时传入的view参数为空的话,返回的时触摸点在整个窗口的位置。

当手指接触到屏幕,不管是单点触摸还是多点触摸,事件都会开始,直到用户所有的手指都离开屏幕。期间所有的UITouch对象都被包含在UIEvent事件对象中,由程序分发给处理者。事件记录了这个周期中所有触摸对象状态的变化。

只要屏幕被触摸,系统就会报若干个触摸的信息封装到UIEvent对象中发送给程序,由管理程序UIApplication对象将事件分发。一般来说,事件将被发给主窗口,然后传给第一响应者对象(FirstResponder)处理。

关于响应者的概念,通过以下几点说明:

响应者对象(Response object

响应者对象就是可以响应事件并对事件作出处理。在iOS中,存在UIResponder类,它定义了响应者对象的所有方法。UIApplication、UIView等类都继承了UIResponder类,UIWindow和UIKit中的控件因为继承了UIView,所以也间接继承了UIResponder类,这些类的实例都可以当作响应者。

第一响应者(First responder)

当前接受触摸的响应者对象被称为第一响应者,即表示当前该对象正在与用户交互,它是响应者链的开端。

响应者链(Responder chain

响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder)。一般来说,第一响应者是个视图对象或者其子类对象,当其被触摸后事件被交由它处理,如果它不处理,事件就会被传递给它的视图控制器对象(如果存在),然后是它的父视图(superview)对象(如果存在),以此类推,直到顶层视图。接下来会沿着顶层视图(top view)到窗口(UIWindow对象)再到程序(UIApplication对象)。如果整个过程都没有响应这个事件,该事件就被丢弃。一般情况下,在响应者链中只要由对象处理事件,事件就停止传递。但有时候可以在视图的响应方法中根据一些条件判断来决定是否需要继续传递事件。

管理事件分发

视图对触摸事件是否需要作处回应可以通过设置视图的userInteractionEnabled属性。默认状态为YES,如果设置为NO,可以阻止视图接收和分发触摸事件。除此之外,当视图被隐藏(setHidden:YES)或者透明(alpha值为0)也不会收事件。不过这个属性只对视图有效,如果想要整个程序都步响应事件,可以调用UIApplication的beginIngnoringInteractionEvents方法来完全停止事件接收和分发。通过endIngnoringInteractionEvents方法来恢复让程序接收和分发事件。

如果要让视图接收多点触摸,需要设置它的multipleTouchEnabled属性为YES,默认状态下这个属性值为NO,即视图默认不接收多点触摸。



转自:http://www.cnblogs.com/spiritstudio/archive/2011/05/24/2054907.html#2217351


分享到:
评论

相关推荐

    IOS触摸事件

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

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

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

    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 6th

    iOS Programming 6th big nerd ranch

    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 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 ...

    iOS触摸和简单实现

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

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

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

    (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应用源码——ios触摸事件例子全集.zip

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

    ios UIScrollView响应touch事件

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

    iOSProgramming4ed

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

    IOS事件处理机制 中文

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

    iOS 11 Programming Fundamentals with Swift Swift, Xcode, and Cocoa Basics azw3

    iOS 11 Programming Fundamentals with Swift Swift, Xcode, and Cocoa Basics 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

Global site tag (gtag.js) - Google Analytics