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,即视图默认不接收多点触摸。
下一篇《iOS
Programming - 触摸事件处理(2)》将介绍具体的一些触摸事件方法。
分享到:
相关推荐
包含ios大部分触摸事件的执行流程,以及一些不常规的触摸事件处理方法
Beginning ios programming with Swift xcode8 and ios10 1. Preface 2. GettingStartedwithXcode8Development 3. SwiftPlaygrounds 4. BuildYourFirstApp 5. HelloWorldAppExplained 6. IntroductiontoAutoLayout 7...
iOS Programming 6th big nerd ranch
iOS Programming The Big Nerd Ranch Guide 4th Edition.pdf 英文最新版,电子档 第一部分
ios programming
IOS 11 Programming Fundamentals with Swift 4 amazon.com 上有售,值得分享!!
iOSProgramming4ed.zip书的最新版书中例子代码及素材(基于xcode5以及ios7)
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 ...
PDF版!!!no epub!iOS Programming The Big Nerd Ranch Guide pdf!
iOS 11 Programming Fundamentals with Swift Swift, Xcode, and Cocoa Basics 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
big nerd出的ios programmning第六版,从第四版开始入门的object-c,第五版变化大部分还是讲的object-c,第六版就开始讲swift了,很不错,跟着书写了一遍例子,基本上swift的语法掌握了
IOS7 Programming Cookbook
Once you master the fundamentals, you’ll be ready to tackle the details of iOS app development with author Matt Neuburg’s companion guide, Programming iOS 7—coming in December 2013., Explore the C...
This book is for developers who have some experience with iOS programming, but want to take their skills to next level by unlocking the full potential of latest version of iOS with Swift to build ...
iOS 6 Programming Cookbook中文版,前18章
Updated and expanded to cover iOS 7 and Xcode 5, iOS Programming: The Big Nerd Ranch Guide leads you through the essential concepts, tools, and techniques for developing iOS applications. After ...
iOS App Programming Guide
iOS 4 Programming Cookbook iphone ipad 需要ios4的编程书籍的朋友可以看看这个
中级ios开发资料