0

所以我正在開發一個應用程序,我的所有手勢都被識別。當我嘗試在手指觸摸屏幕的任何地方嘗試添加UIImageViews時,我的問題就出現了。手指跟蹤和手勢識別

這些觀點都是跟隨手指,這是他們做的,但問題是,我相信他們是吞嚥接觸不允許被識別的手勢。我曾嘗試過:

[_fingerHolder1 setUserInteractionEnabled:NO]; 
[_fingerHolder2 setUserInteractionEnabled:NO]; 

但它似乎沒有改變任何東西。 我在ccTouchesBegan/Moved/Ended方法中添加了這些視圖,而手勢正在各自的處理程序中識別。

我已經看過使用UIPanGesture,但我在識別滑動時遇到了一些問題,並且在設置手指跟蹤器的UIImageViews的座標時這樣做。我應該試試更多還是有不同的解決方案?

任何幫助表示讚賞!

+0

如果他們被「吞噬」,他們怎麼能跟隨手指?看起來這些是互相排斥的... – HackyStack 2013-04-24 20:40:31

+0

我對被吞噬的觸覺的理解是,視圖不允許通過較低視圖觸及...... 他們跟隨手指,因爲在ccTouchesMoved我更新以移動ImageViews。不知道有什麼困惑嗎?如我錯了請糾正我。 – Lagoo87 2013-04-24 20:56:09

回答

2

的的UIImageView將接收和處理觸摸,因此它們將不被轉發到的cocos2d OpenGL的視圖(也一個UIView)。

爲了使這項工作,你需要創建的UIImageView的子類,並覆蓋每個接觸...方法和手動將事件轉發到cocos2d中的觀點,下面是的touchesBegan的例子:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    [[CCDirector sharedDirector].view touchesBegan:touches withEvent:event]; 
} 

使用替代該UIImageView的子類你目前使用的原始的。

這將使普通的cocos2d觸摸事件的工作,它也應該UIGestureRecognizers像預期的那樣,如果你已經添加了那些cocos2d中的觀點。

+0

所以我試圖做到這一點,但沒有看到觸及的事情。 我分類UIImageView並覆蓋所有的觸摸方法。但是當ccTouchBegan被激活時,我沒有看到我的NSLog語句被輸出。 手指UIImageViews的出現和輕微移動,和手勢是公認的,但我不知道這是否是視圖吞嚥觸摸或者如果我的計算查看舉動是錯誤的。我的看法是: UITouch * touch1 = [[touches allObjects] objectAtIndex:0]; CGPoint pt = [touch1 locationInView:_gameBoard]; _fingerHolder1.center = pt; in ccTouchesMoved。 – Lagoo87 2013-04-25 18:26:06

+0

uiimageview子類是否接收觸摸事件?如果不檢查用戶交互屬性 – LearnCocos2D 2013-04-25 19:46:21

+0

否,它沒有收到觸摸事件。我有每個SubClassed視圖(LGImageView)上的userInteraction屬性設置爲YES。 我正在識別遊戲板上的手勢,並將其設置爲userInteraction:YES,exclusiveTouch:YES和MultiTouch:YES; 我已經試過所有這些打開和關閉,但仍然是同樣的問題。 – Lagoo87 2013-04-25 20:07:32

0

如果我明白你需要什麼(如果我錯了,請糾正我),你想在檢測到拖拽(pan)事件時移動一些UIViews,但是當用戶觸摸屏幕時也添加UIImageViews,禁用觸摸。

你應該設置UIIMageView.userInteractionEnable = YES(默認設置爲NO),基本上每個應該檢測觸摸的視圖應該有userInteractionEnable = YES

如果你想忽略一些你應該實現的子視圖觸摸: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法UIGestureRecognizerDelegate

對於處理不同類型的手勢,你應該實現的方法: -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; }