1

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

在我的视图控制器中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,并且按钮接收到触摸事件就好了,所以问题仅在于以编程方式添加的子视图。

4

3 回答 3

2

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

于 2012-04-26T21:01:32.370 回答
0

超级视图如何在其任何子视图之前拦截触摸序列?

TLDR:

[containerView setCanCancelContentTouches:NO]; 

就像您将手势识别器添加到滚动视图一样执行此操作。

也调查

[containerView setDelaysContentTouches:NO];

如果上述行为不完全正确。

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

于 2012-04-23T20:46:18.370 回答
0

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

switch (reconiger.state)
{
    case UIGestureRecognizerBegin:
      //Do something when start recognizer
      break;
    case UIGestureRecognizerEnd:
      //Do something when end recognizer
      break;
}
于 2013-03-12T08:32:27.640 回答