资源预览内容
第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
第9页 / 共21页
第10页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
无限互联是国内唯一一家专注于iPhone和iPad软件开发培训机构,到目前为 止为各大公司输送了一大批优秀的iOS高级软件研发人才。随着iOS6系统的发布, 我们也在当天陆续发布国内首套完整的iOS开发的视频教程,手把手教您写代码, 从入门到熟练再到精通。 高薪就业是检验一家培训机构质量的唯一标准,我们的学员高薪就业是对我们 最好的肯定,也是我们前进的最强烈的动力,我们感谢同学们的努力,感谢你们对 我们的支持!我们也将免费为你们提供最好的就业后的技术支持! 亲爱的同学们,你们的高薪就业才是我们最大的成功! 版权所有:无限互联3G学院 13年2月28日星期四 手势与触摸 主讲:陈 为 版权所有:无限互联3G学院 13年2月28日星期四 版权所有:无限互联3G学院 本节目标 触摸事件的处理方式 响应者链的基本概念 事件传递的过程 手势识别器的基本概念和用法 13年2月28日星期四 版权所有:无限互联3G学院 1.事件类型 在iOS上,事件有多种形式: 触摸事件 运动事件 远程控制事件 13年2月28日星期四 版权所有:无限互联3G学院 事件处理基本方法 事件处理的方法 / 当一个或多个手指触碰屏幕时 - (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 响应者类通过复写以下方法,可以监听触摸事件 13年2月28日星期四 版权所有:无限互联3G学院 当用户触摸视图时,调用视图如下方法 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event UITouch *touch = touches anyObject; NSInteger tapNumber = touch tapCount; 当用户触摸屏幕时,事件会被封装成一个event实例,包含了用户触摸的相关的 信息(位置信息),event实例中包含着若干个UITouch实例,一个touch表示用 户的手指数量。 UITouch触摸对象 13年2月28日星期四 版权所有:无限互联3G学院 UITouch类中常用属性 UITouch触摸对象 window: 触摸产生时所处的窗口。 view: 触摸产生时所处的视图。 tapCount: 轻击(Tap)操作和鼠标的单击操作类似,tapCount表示短时间内轻击屏幕的次数。因此可以根据tapCount判 断单击、双击或更多的轻击。 timestamp: 时间戳记录了触摸事件产生或变化时的时间。单位是秒。 phase: 触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。而通过phase可以查看当前 触摸事件在一个周期中所处的状态。phase是UITouchPhase类型的,这是一个枚举配型,包含了 UITouchPhaseBegan(触摸开始) UITouchPhaseMoved(接触点移动) UITouchPhaseStationary(接触点无移动) UITouchPhaseEnded(触摸结束) UITouchPhaseCancelled(触摸取消) 13年2月28日星期四 版权所有:无限互联3G学院 UITouch类中常用方法 UITouch触摸对象 - (CGPoint)locationInView:(UIView *)view: 函数返回一个CGPoint类型的值,表示触摸在view这个视图上的位置,这里返回的位 置是针对view的坐标系的。 - (CGPoint)previousLocationInView:(UIView *)view: 该方法记录了前一个坐标值,函数返回也是一个CGPoint类型的值, 表示触摸在 view这个视图上的位置,这里返回的位置是针对view的坐标系的。 13年2月28日星期四 版权所有:无限互联3G学院 2、事件传递 事件的传递 从事件发生到其处理的对象,传递要经过特殊的一段过程。当用户点击设备屏 幕时,iOS捕捉到一系列的触摸,将其打包到UIEvent对象中并放置到应用程序 活动事件队列中。UIApplication对象从事件队列中取出最前面的事件并将其分 发。通常,其发送事件给应用程序的主窗口UIWindow实例,再由窗口对 象发送事件给”第一响应者 (触摸的视图)”处理。 13年2月28日星期四 版权所有:无限互联3G学院 3、响应者链的基本概念 事件响应者链的基本概念 响应者链表示一系列的响应者对象。事件被交由第一响应者对象处理,如果第一响应 者不处理,事件被沿着响应者链向上传递,交给下一个响应者(next responder) 响应者对象是一个能接收并处理事件的对象。UIResponser是所有响应者对 象的基类。该基类定义了一系列编程接口,不但为事件处理进行服务而且还提 供了通用的响应行为处理。UIApplication, UIView(包括 UIWindow),UIViewController都直接或间接的继承自UIResponser,所有 的这些类的实例都是响应者对象。 13年2月28日星期四 版权所有:无限互联3G学院 事件响应者链传递的过程 事件响应者链 当用户与视图交互时,将会 消息传递给视图控制器,如果 不存在控制器,传递给父视图 如果不处理该消息,则继续 将消息向上传递 最上层的视图如果也不处 理,将事件交予Window对象 最后交由UIApplication实 例,如果不处理,丢弃事件 ! 响应者链是一系列已连接的响应者对 象,事件或消息在其路径向上进行传递。 在其上允许响应者将事件处理的责任传递 给高层的其它响应者。(nextResponser 下一个响应者) 13年2月28日星期四 版权所有:无限互联3G学院 课堂练习1: 课堂练习1 处理轻击事件(单击和双击) 处理轻扫事件 处理捏合手势 13年2月28日星期四 版权所有:无限互联3G学院 2、手势识别器 UIGestureRecognizer UITapGestureRecognizer(轻击) UIPinchGestureRecognizer(捏合) UIPanGestureRecognizer(平移) UISwipeGestureRecognizer(轻扫) UIRotationGestureRecognizer(旋转) UILongPressGestureRecognizer(长按) UIGestureRecognizer类,用于检测、识别用户使用设备时所用的手势。它是一 个抽象类,定义了所有手势的基本行为。以下是UIGestureRecognizer子类,用 于处理具体的用户手势行为 13年2月28日星期四 版权所有:无限互联3G学院 课堂实例2: 一只手单击 一只手双击 区别两种手势(一只手单击、双击) UITapGestureRecognizer *singleTap = UITapGestureRecognizer alloc initWithTarget:self action:selector(singleGesture:); self.view addGestureRecognizer:singleTap; singleTap release; UITapGestureRecognizer *doubleTap = UITapGestureRecognizer alloc initWithTarget:self action:selector(doubleGesture:); doubleTap.numberOfTapsRequired = 2; self.view addGestureRecognizer:doubleTap; doubleTap release; singleTap requireGestureRecognizerToFail:doubleTap; 13年2月28日星期四 版权所有:无限互联3G学院 课堂实例3: 轻扫手势 / 向上轻扫 UISwipeGestureRecognizer *swipeGesture = UISwipeGestureRecognizer alloc initWithTarget:self action:selector(swipe:); swipeGesture.direction = UISwipeGestureRecognizerDirectionUp; self.view addGestureRecognizer:swipeGesture; swipeGesture release; 13年2月28日星期四 版权所有:无限互联3G学院 课堂实例4: 平移手势 / 平移手势(滑动) UIPanGestureRecognizer *panGesture = UIPanGestureRecognizer alloc initWithTarget:self action:selector(pan:); self.view addGestureRecognizer:panGesture; panGesture release; - (void)pan:(UIPanGestureRecognizer *)_pan CGPoint point = _pan locationInView:self.view; tempView.center = point; 13年2月28日星期四 版权所有:无限互联3G学院 课堂实例5: 长按手势 / 长按手势 UILongPressGestureRecognizer *longPressGesture = UILongPressGestureRecognizer alloc initWithTarget:self action:selector(longPress:); longPressGesture.minimumPressDuration = 3; self.view addGestureRecognizer:longPressGesture; longPressGesture release; - (void)longPress:(UILongPressGestureRecognizer *)_longPress NSLog(“long press : %u“, _longPress state); 13年2月28日星期四 版权所有:无限互联3G学院 课堂实例6: 旋转手势 / 旋转手势 UIRotationGestureRecognizer *rotationGesture = UIRotationGestureRecognizer alloc initWithTarget:self action:selector(rotation:); self.view addGestureRecognizer:rota
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号