如何用UIGestureRecognizer替换TouchesBegan

时间:2011-07-08 17:27:09

标签: objective-c uigesturerecognizer

这是问题所在: 我想在我的应用程序中使用UIGestureRecognizer。 出于这个原因,我想从我的观点中抛弃TouchBegan / TouchEnded事件。

但是我不明白如何使用UIGestureRecognizers进行触摸时(用户将手指放在屏幕上)进行管理。

最简单的一个是UITapGestureRecognizer,但是只有当TapGesture完成时才会触发相关的选择器(嗯......这当然是完全合理的)。但问题仍然存在:如何停止使用touchesBegan并从UIGestureRecognizer获取该事件?

谢谢!

3 个答案:

答案 0 :(得分:4)

以下是一个例子:

 //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

答案 1 :(得分:1)

对于你的尝试,你做不到。手势识别器用于高级手势,因此它们在所有应用程序中的行为相同(想想滑动,双击所需的时间等)。对于低级别控制和执行识别器无法执行的操作,您仍然需要在touchesbegan,touchesEnded等中实现逻辑。

答案 2 :(得分:0)

为什么不在UIGestureRecognizer子类中实现自己的touchesBegan - 拦截消息,提取你想要的信息,然后将消息传递给super的touchesBegan?