我在弹出选项卡中使用CCScrollView,该选项卡与屏幕上的一些现有控件重叠。问题是,尽管CCScrollView对触摸做出了正确的响应,但触摸并没有被吞咽,因此它下面的控件也会对触摸做出响应。
我验证了控件正在TouchDispatcher中将自己注册为目标委托,并且我实际上在CCScrollView::ccTouchBegan中的"return true"上设置了一个断点,并观察它命中它,但触摸仍然传递给下面的控件。
我在SO上找不到太多关于这方面的信息,但我发现不久前有人在常规cocos2d:中遇到了这个问题
http://www.cocos2d-iphone.org/forums/topic/making-ccscrollview-swallow-touches-but-still-scroll/
不幸的是,唯一的答案没有帮助。
我觉得我一定错过了一些简单的东西,但我已经无计可施了。关于我做错了什么有什么建议吗?
我在休息后又回到了这个问题上,在再次感到沮丧之后,我发现CCScrollView实际上真的想要这种行为。来自CCScrollView.cpp的133-136行:
void CCScrollView::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, CCLayer::getTouchPriority(), false);
}
结尾处的false当然是罪魁祸首。
我完全不知道为什么有人希望将此作为默认行为,但至少我的代码现在可以工作了。
MyLayer::MyLayer()
{
CCWidgetLayout*widgetLayout=CCCWidgetlayout::create();
addChild(小部件布局);
CCScroll*scroll==CCScroll::create(CCSize(480800));
scroll->setPosition(ccp(480,800));
scroll->setScrollSelector(this, scroll_selector(MyLayer::onScrolling));
scroll->setDirection(eScrollDirectionVertical);
widgetLayout->addChild(scroll);
sprite = CCSprite::create("scrollcontent.png");
scroll->setContainerSize(sprite->getContentSize());
scroll->getContainer()->addChild(sprite);
}