处理iPhone多点触控事件

上传人:ji****72 文档编号:45835001 上传时间:2018-06-19 格式:PDF 页数:7 大小:166.30KB
返回 下载 相关 举报
处理iPhone多点触控事件_第1页
第1页 / 共7页
处理iPhone多点触控事件_第2页
第2页 / 共7页
处理iPhone多点触控事件_第3页
第3页 / 共7页
处理iPhone多点触控事件_第4页
第4页 / 共7页
处理iPhone多点触控事件_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《处理iPhone多点触控事件》由会员分享,可在线阅读,更多相关《处理iPhone多点触控事件(7页珍藏版)》请在金锄头文库上搜索。

1、 1 处理 iPhone 多点触控事件 Edit by Jerry Lee () 处理多点触控事件,你自己的定制 UIview 子类别(或者,不频常,你自己的定制 UIApplication 或 UIwindow 子类别) ,要实行至少在其中的 UIResponder 方法事件处 理。以下章节描述这些方法,讨论的方法处理常用手势,显示出典型的回应者对象 处理一个复杂序列多点触控事件,并提出了一些技术事件处理。 在这一章节: 1. 事件的处理方法 2. 处理轻拍的手势 3. 处理重拍的手势 4. 在处理复杂的多点触控顺序 5. 事件处理技巧 一、事件的处理方法 在一个多点触控序列,应用程序分派了

2、一系列的事件讯息。接受和处理这些信息, 回应者对象类别必须实现(implement)至少有下列情形之一的方法(methods)公告 UIResponder: (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event; (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 应用程序发送这些讯息,针对某个触摸(touches)阶段,

3、当有新的或改变触摸: 一个或更多的手指触摸下在萤幕上,它发送了 touchesBegan:withEvent:讯息。 一个或更多的手指移动,它发送了 touchesMoved:withEvent:讯息。 一个或更多的手指从萤幕上离开,它发送了 touchesEnded: withEvent:讯息。 每一个这些方法的, 是与触摸阶段 (例如 UITouchPhaseBegan) , 其中任何 UITouch 对象,你可以找到评估它阶段的属性。 每一个讯息,就是引用一个事件的处理方法,传送两个参数。第一,是一套 UITouch 对象所代表的新的或经改变触摸,涉及为特定阶段。第二个参数是一个 UIE

4、vent 对 象代表这个特别的事件。从事件对象,你可以得到所有接触对象( allTouches )为 事件触摸对象的一个子集,过滤为 View 或 Windows 。这些触摸对象代表触及这并 没有改变,自上次事件信息的,或已改变,但在不同阶段进行。 2 回应者对象经常处理的事件,为某一特定阶段所获得一种或一种以上的 UITouch 对 象在传送一套,然后再评估其属性或获得它们的位置。 (如果有任何触摸对象会做, 可采取送 NSSet 对象的一个 anyObject 信息)的一个重要方法是 locationInView:,其 中 , 如 果 传 送 self 的 参 数 , 产 生 的 位 置

5、触 摸 在 回 应 者 对 象 坐 标 系 统 (previousLocationInView:) 。 一 个 平 行 的 方 法 告 诉 你 , 上 次 的 位 置 触 摸 ( previousLocationInView: ) 。 UITouch的属性案例(instance)告诉你有多轻拍(taps) 已作出( tapCount ) ,当触摸己建立或最后己变化(timestamp)且是否触摸被强拍 (swipe),如果这样,在哪个方向( info) 。 回应者类别并不实现所有三个这事件的方法上面所列。举例来说,如果它正在寻找 一手指时,他们从萤幕离开,它只需实现 touchesEnded:

6、withEvent:。事实上,不是执 行上述的任何方法, 回应者颣别可实现 touchesChanged:withEvent:和监测阶段, 触及 在那个方法。 如果一个回应者建立持久的对象,而在处理事件过程中多点触摸序列,它应实现 touchesCanceled 处置这些对象时,该系统取消了序列。取消经常发生时,一个外部 事件,举例来说,一通电话打乱目前的应用程序的事件处理。注意到一回应者对象 个也应处置这些同样的物体, 当它接收最 touchesEnded:withEvent:留言, 为一个多点 触摸序列。 (见“事件处理技术“ Event-Handling Techniques),以了解如

7、何确定最后的 触摸在一个序列) 。 二、处理轻拍的手势 一件很平常的手势,在 iPhone 的应用程序中是轻拍(tap):使用者他或她的手指轻拍 (taps)一个对象。回应者对象能回应一个单一的轻拍中的一个方法,一个双轻拍 (double-tap)在另一个,并可能分三轻拍(tripe-tap),但另一种方式表达。以确定有多 少次使用者轻拍回应者对象,你会得到 tapCount 属性值的一个 UITouch 对象。 最 好 的 地 方 找 到 这 个 值 (Value) 所 采 用 的 方 法 touchesBegan:withEvent: 和 touchesEnded:withEvent:。在

8、很多情况下,后者的方法是首选,因为它对的回应至于 触摸阶段在使用者轻离开拍。由寻找该轻拍的计算(count)轻拍后往上(touch-up)阶段 ( UITouchPhaseEnded ) ,你确保手指,实在是打字中,比如,在案例,轻拍下 (touching down)然后拖曳(dragging )。 在列表 8-1 , touchesEnded:withEvent:方法实现回应双轻拍(double-tap)手势缩放的 内容显示在一个 scroll View。 列表 8-1 处理双轻拍(double-tap)手势 - (void) touchesEnded:(NSSet*)touches wit

9、hEvent:(UIEvent*)event UIScrollView *scrollView = (UIScrollView*)self superview; UITouch *touch = touches anyObject; CGSize size; CGPoint point; 3 if(touch tapCount = 2) if(!_viewController _isZoomed) point = touch locationInView:self; size = self bounds.size; point.x /= size.width; point.y /= size.

10、height; _viewController _setZoomed:YES; size = scrollView contentSize; point.x *= size.width; point.y *= size.height; size = scrollView bounds.size; point.x -= size.width / 2; point.y -= size.height / 2; scrollView setContentOffset:point animated:NO; else _viewController _setZoomed:NO; 一个复杂出现时,回应者对象

11、要处理的单轻拍和双轻手势有不同的方式。举例来说, 一个单轻拍可能会选择对象和一个双轻拍可能会显示 View 为编辑该项目这就是双 轻拍。又是怎样回应者对象知道,就是单轻拍,是不是第一次的一个组成部分双轻 里是如何回应者对象可以处理这种情况使用事件处理方法只是描述: 在 touchesEnded:withEvent:当自轻拍计数是一个,该回应者对象发送 itself 本身 是一个 performSelector:withObject:afterDelay:讯息。在选择确定了另一种方法实现, 由回应者处理单轻拍手势;对象为第二个参数是相关 UITouch 对象;延误(delay)是了 一些合理时间

12、间隔去区分单轻拍和双轻手势。 在 touchesBegan:withEvent:,如果轻拍计数是两个,回应者对象对取消悬而未决 的延迟履行发送本身 cancelPreviousPerformequestsithtarget:消息。 如果轻拍计数, 是不是两个,该方法所确定的选择在为单轻拍手势是引用后拖延。 在 touchesEnded:withEvent:, 如果轻拍计数是两个是两个, 回应者履行必要行动, 处理双轻手势。 三、处理重拍的手势 当使用者非常迅速的一个或一个以上的手指穿过萤幕时, 系统认为这是重拍的手势。 重拍手势常常被用来滚动的内容或去向前和向后的一个相连的一系列项目。该系统

13、监视涉及在屏幕上动作,如果用手指的方向和速度都是一致可能是重拍手势,它合 集 info 属性的相关 UITouch 对象;属性表明不仅发生一重拍,但其方向。由于这种检 测需要跟踪的触摸随着时间的推移,行踪,可在一个 UITouchPhaseMoved 阶段,并 没有被标示为一重拍,即使后来变成了有标记的,因为重拍。 注:一重拍手势,是编程等于一快速轻拍手势,虽然他们有不同的人机界面的内涵。 还能用,快速轻拍是使用转移页面之间的内容,如照片。一重拍,是用来改变一些4 元素;举例说,重拍在一封电子邮件上,造成删除按钮出现。 但是,该系统可能稍后不标注触摸作为重拍,如果随后跟踪的手指显示了运动不一

14、致一重拍的手势。如果一个回应者对象在寻求一个重拍在一个特定方向,并没有理 会,最后重拍触摸的状态,它可以测试 info 属性的任何一项 UIResponder 事件的处 理方法。一般来说,你最有兴趣,是否触动作是一重拍,在触摸对象的 UITouchPhaseEnded 阶段。 你会因此寻找和评估, 重拍常数在 touchesEnded:withEvent: 方法。 列表 8-2 显示一个简单 touchesEnded:withEvent:实现是为了寻找重拍(swipes)至左和 右,并执行适当的行动方向。 列表 8-2 处理重拍的手势 - (void)touchesEnded:(NSSet*)

15、touches withEvent:(UIEvent*)event UITouch *touch = touches anyObject; if (touch.info else if (touch.info return; 该方法取得了一个触摸对象从通过在设置评估 bit mark 对象的 info 属性,以确定是 否 UITouchInfoSwipedRight 和 UITouchInfoSwipedLeft 是常量。注意,当该系统探测 到重拍的手势,在一个方向,如“向右上角的萤幕上“ ,它规定了两个常数 bit mark 比, 以显示这个方向 (例如, UITouchInfoSwiped

16、Right 和 UITouchInfoSwipedUp ) 。 四、在处理复杂的多点触控顺序 轻拍(taps)及重拍(swipes)是简单的手势。处理多点触控摸顺序是更为复杂-效果上, 诠释一个特定应用手势取决于哪些应用程序正试图完成的任务。你可能要跟踪所有 涉触模的阶段,录制触摸属性已改变,变更内部状态的。 最好的方法传达你如何可能处理复杂的多点触控摸顺序,用一个例子。列表 8-3 日, 显示出如何定制 UIView 对象回应触及动态的“欢迎“的标语牌围绕在萤幕上当用手 指的动作,当用户重拍的手势,并改变欢迎的语言的。 (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event UITouch *touch = event allTouches anyObject; / Only move the pl

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号