子视图中的手势识别器问题

时间:2012-04-23 19:28:10

标签: objective-c ios uigesturerecognizer

我有一个相当基本的问题,我环顾四周(这里,谷歌等)并没有找到解决方案:

在我的View Controller的viewDidLoad中,我有:

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(myfunc:)];

//I have a UIScrollView named "containerView"
//here's some code that creates an UIView in a variable named "myView"

//this works fine, I can see "myView" when I run it
[containerView addSubview:myView];

[myView addGestureRecognizer:longPress];

然后我在同一个类中有这个功能:

- (void)myfunc:(UIRotationGestureRecognizer *)recognizer 
{
    NSLog(@"hola!"); //never runs
}

NSLog的调用永远不会运行。我做错了什么?

修改

一些额外信息:似乎没有任何触摸事件被发送到子视图。但是,我尝试在UIScrollView中添加带有按钮的UIView,并且按钮接收触摸事件就好了,所以问题只在于以编程方式添加的子视图。

3 个答案:

答案 0 :(得分:2)

奇怪的是,在UIScrollView中添加“容器”UIView,然后在此容器内添加其他子视图,使其工作。现在,触摸事件将发送到子视图。

答案 1 :(得分:0)

How can a superview interecept a touch sequence before any of its subviews?

TLDR:

[containerView setCanCancelContentTouches:NO]; 

就像在滚动视图中添加手势识别器一样。

也要研究

[containerView setDelaysContentTouches:NO];

如果上述行为不太正确。

了解更多信息: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIScrollView_Class/Reference/UIScrollView.html

答案 2 :(得分:0)

我认为在myFunc上你必须做那样的事情:

switch (reconiger.state)
{
    case UIGestureRecognizerBegin:
      //Do something when start recognizer
      break;
    case UIGestureRecognizerEnd:
      //Do something when end recognizer
      break;
}