IOS 应用处理单个和多个触碰手势分析
来源:互联网 发布:2017昆广网络收费标准 编辑:程序博客网 时间:2024/06/12 05:03
作者:朱克锋
邮箱:zhukefeng@iboxpay.com
转载请注明出处:http://blog.csdn.net/linux_zkf
iPhone应用程序中一个很常见的手势是触击:即用户用手指触碰一个对象。响应者对象可以以一种方式响应单击,而以另外一种方式响应双击,甚至可能以第三种方式响应三次触击。您可以通过考察UITouch对象的tapCount属性声明值来确定用户在一个响应者对象上的触击次数,
取得这个值的最好地方是touchesBegan:withEvent:和touchesEnded:withEvent:方法。在很多情况下,我们更倾向于后者,因为它与用户手指离开屏幕的阶段相对应。在触摸结束阶段(UITouchPhaseEnded)考察触击的次数可以确定手指是真的触击,而不是其它动作,比如手指接触屏幕后拖动的动作。
程序清单展示了如何检测某个视图上是否发生双击。
- (void) touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event
{
UITouch *touch = [touches anyObject];
if ([touch tapCount] == 2) {
CGPoint tapPoint = [theTouch locationInView:self];
// Process a double-tap gesture
}
}
当一个响应者对象希望以不同的方式响应单击和双击事件时,就会出现复杂的情况。举例来说,单击的结果可能是选定一个对象,而双击则可能是显示一个编辑视图,用于编辑被双击的对象。那么,响应者对象如何知道一个单击不是另一个双击的起始部分呢?我们接下来解释响应者对象如何借助上文刚刚描述的事件处理方法来处理这种情况:
1. 在touchesEnded:withEvent:方法中,当触击次数为一时,响应者对象就向自身发送一个performSelector:withObject:afterDelay:消息,其中的选择器标识由响应者对象实现的、用于处理单击手势的方法;第二个参数是一个NSValue或NSDictionary对象,用于保存相关的UITouch对象;时延参数则表示单击和双击手势之间的合理时间间隔。请注意:使用一个NSValue对象或字典来保存触摸对象是因为它们会保持传入的对象。然而,您自己在进行事件处理时,不应该对UITouch对象进行保持。
2. 在touchesBegan:withEvent:方法中,如果触击次数为二,响应者对象会向自身发送一个cancelPreviousPerformRequestsWithTarget:消息,取消当前被挂起和延期执行的调用。如果触碰次数不为二,则在指定的延时之后,先前步骤中由选择器标识的方法就会被调用,以处理单击手势。
3. 在touchesEnded:withEvent:方法中,如果触碰次数为二,响应者会执行处理双击手势的代码。
- IOS 应用处理单个和多个触碰手势分析
- IOS 应用检测碰擦手势分析
- IOS的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- iOS中的触摸事件和手势处理
- IOS手势处理
- iOS手势处理
- iOS 手势处理
- iOS UIKit - 手势处理
- IOS手势处理
- 手势处理 ios
- Chromium网页滑动和捏合手势处理过程分析
- ios开发-单击和双击手势的区分处理
- ios开发-单击和双击手势的区分处理
- 4 Values whose Sum is 0 (P2785)
- IOS 应用低内存警告分析
- IOS 应用创建一个视图对象分析
- 死循环
- sprintf函数的用法
- IOS 应用处理单个和多个触碰手势分析
- XCode各版本对应的Mac OS操作系统版本
- IOS 应用UIWindow分析
- HDU 3549 最大流 EK算法 邻接表实现
- 运算符重载
- IOS 应用UIView分析
- 行の先頭(^)
- 行の末尾($)
- hdu 3183 A Magic Lamp