我在弹出式选项卡中使用CCScrollView,它与屏幕上的某些现有控件重叠。问题是虽然CCScrollView正确地响应触摸,但触摸不会被吞下,因此它下面的控件也会响应它们。
我验证了控件正在将自己注册为TouchDispatcher的目标委托,我实际上在CCScrollView :: ccTouchBegan中的“return true”上设置了一个断点并观察它是否触及它,但触摸仍然传递给控件也在下面。
我在SO上找不到太多,但我发现有人在常规的cocos2d中遇到过这个问题:
http://www.cocos2d-iphone.org/forums/topic/making-ccscrollview-swallow-touches-but-still-scroll/
不幸的是,那里唯一的答案没有帮助。
我觉得我必须错过一些简单的东西,但我只是在我的智慧结束。关于我做错了什么建议?
答案 0 :(得分:2)
我在休息后回到问题,经过一些新的挫折后,我发现CCScrollView实际上真的想要这种行为。从CCScrollView.cpp的第133-136行:
void CCScrollView::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, CCLayer::getTouchPriority(), false);
}
最后 false 当然是罪魁祸首。
我完全不知道为什么有人会想要这个作为默认行为,但至少我的代码现在可以正常工作。
答案 1 :(得分:0)
MyLayer :: MyLayer()
{
CCWidgetLayout * widgetLayout = CCWidgetLayout :: create();
的addChild(widgetLayout);
CCScroll * scroll = = CCScroll :: create(CCSize(480,800));
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);
}