如何用 UIGestureRecognizer 替换 TouchesBegan
Posted
技术标签:
【中文标题】如何用 UIGestureRecognizer 替换 TouchesBegan【英文标题】:How to replace TouchesBegan with UIGestureRecognizer 【发布时间】:2011-07-08 17:27:08 【问题描述】:问题来了: 我想在我的应用程序中使用 UIGestureRecognizer。 出于这个原因,我想从我的观点中放弃 TouchBegan/TouchEnded 事件。
但是我不明白如何使用 UIGestureRecognizers 管理触摸开始的时间(用户将手指放在屏幕上)。
最简单的一个是 UITapGestureRecognizer 但相关的选择器只有在 TapGesture 完成时才会被触发(嗯......当然这完全有意义)。但问题仍然存在:如何停止使用 touchesBegan 并从 UIGestureRecognizer 获取该事件?
谢谢!
【问题讨论】:
【参考方案1】:这是一个例子:
//Pan gesture
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
((UIPanGestureRecognizer *)recognizer).minimumNumberOfTouches = 3; //number of fingers
recognizer.delegate = self;
[self.view addGestureRecognizer:recognizer];
[recognizer release];
- (void)handlePan:(UIPanGestureRecognizer *)recognizer
if (recognizer.state == UIGestureRecognizerStateBegan)
//do something
else if (recognizer.state == UIGestureRecognizerStateEnded)
//do something
还在 .h 文件中实现 UIGestureRecognizerDelegate。根据您使用的视图,您可能需要执行 self.view.userInteractionEnabled = YES 。例如,如果是 UIImageView,则需要设置 userInteractionEnabled = YES,默认为 NO
【讨论】:
【参考方案2】:对于你正在尝试的东西,你做不到。手势识别器用于高级手势,因此它们在所有应用程序中的行为相同(例如滑动、双击所需的时间等)。对于低级控制和识别器不能做的事情,你仍然需要在 touchesbegan、touchesEnded 等中实现逻辑。
【讨论】:
这个响应是完全错误的,用下面的 UIGestureRecognizerStateBegan 检查响应。【参考方案3】:为什么不在 UIGestureRecognizer 子类中实现您自己的 touchesBegan —— 拦截消息,提取您想要的信息,然后将消息传递给 super 的 touchesBegan?
【讨论】:
以上是关于如何用 UIGestureRecognizer 替换 TouchesBegan的主要内容,如果未能解决你的问题,请参考以下文章