2012-04-23 144 views
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,所有這些都在UIScrollView中,並且按鈕接收觸摸事件就好了,所以這個問題只能通過編程方式添加子視圖。

+0

你試過長按屏幕? – 2012-04-23 19:38:31

+0

那麼這就是所有這一切的全部,不是嗎.. – cambraca 2012-04-23 19:40:06

+0

我認爲這樣:)只是拖動^^你的代碼看起來完美無論如何。 – 2012-04-23 19:41:54

回答

2

奇怪的是,添加的UIScrollView裏面的「容器」的UIView,然後將另一子視圖在此容器內部,使工作。現在觸摸事件被髮送到子視圖。

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

+0

我玩過這些屬性,他們沒有幫助。看看我對這個問題的編輯,我在界面編輯器上手動添加了一個子視圖,它接收觸摸事件,但沒有通過編程方式添加子視圖... – cambraca 2012-04-23 20:55:13

0

我覺得myFunc的你必須做這樣的出頭:

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