cocos2d-屏蔽touch事件

問題描述:
在使用cocos2d做ui時,經常會遇到,需要彈出一個子界面,並且需要屏蔽下層界面的touch事件。而彈出框上某些區域,或者按鈕可以響應touch事件。

解決方案步驟:

1> 給彈出框添加帶吞噬能力的touch代理功能。

[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:kCCMenuTouchPriority - 1 swallowsTouches:YES];

注意:
a>:代理是會被retain的。所以使用完後務必要移出。
[[CCTouchDispatcher sharedDispatcher] removeDelegate:self];

b>:priority其值越小,越是會優先響應touch事件。
這裏使用kCCMenuTouchPriority - 1 既該界面的響應優先級比菜單按鈕優先級低。

2> 實現代理方法ccTouchBegan:返回YES表示吞噬touch事件,則其他代理都不收到該事件了。
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{

return YES;
}

如果需要在某個區域內可以響應touch事件,則可以添加如下代碼
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CGRect aRect = CGRectMake(50, 50, 50, 50);
CGPoint touchpoint = [touch locationInView:[touch view]];
touchpoint = [[CCDirectorsharedDirector] convertToGL: touchpoint];
return !CGRectContainsPoint(aRect, touchpoint);
}

如果你希望除了菜單按鈕以外的區域都不響應touch事件你也可以這樣寫:(假如我們的菜單是myMenu)
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{

if ([myMenu itemForTouch:touch])
{
return NO;
}

returnYES;
}
注意:其中itemForTouch:方法的使用有點技巧,提示這個方法是ccmenu的私有方法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章