我有一个相当基本的问题,我环顾四周(这里,谷歌等)并没有找到解决方案:
在我的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,并且按钮接收触摸事件就好了,所以问题只在于以编程方式添加的子视图。
答案 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];
如果上述行为不太正确。
答案 2 :(得分:0)
我认为在myFunc上你必须做那样的事情:
switch (reconiger.state)
{
case UIGestureRecognizerBegin:
//Do something when start recognizer
break;
case UIGestureRecognizerEnd:
//Do something when end recognizer
break;
}