0

我在与屏幕上一些现有控件重叠的弹出选项卡中使用 CCScrollView。问题是虽然 CCScrollView 正确响应触摸,但触摸并没有被吞没,因此它下面的控件也响应它们。

我验证了控件正在使用 TouchDispatcher 将自己注册为目标委托,实际上我在 CCScrollView::ccTouchBegan 的“return true”上放置了一个断点并观察它击中它,但触摸仍然传递给下面的控件。

我在 SO 上找不到太多关于此的内容,但我发现有人前段时间在常规 cocos2d 中遇到了这个问题:

http://www.cocos2d-iphone.org/forums/topic/making-ccscrollview-swallow-touches-but-still-scroll/

不幸的是,那里唯一的答案没有帮助。

我觉得我一定错过了一些简单的东西,但我几乎无能为力。关于我做错了什么有什么建议吗?

4

2 回答 2

2

休息后我又回到了这个问题,在重新感到沮丧之后,我发现 CCScrollView 实际上真的想要这种行为。从 CCScrollView.cpp 的第 133-136 行开始:

void CCScrollView::registerWithTouchDispatcher()
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, CCLayer::getTouchPriority(), false);
}

最后那个的当然是罪魁祸首。

我完全不知道为什么有人会希望这是默认行为,但至少我的代码现在可以工作。

于 2013-09-16T18:52:19.267 回答
0

MyLayer::MyLayer()

{

CCWidgetLayout* widgetLayout = CCWidgetLayout::create();

addChild(widgetLayout);

CCScroll* 滚动= = 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);

}

于 2014-01-04T18:24:58.700 回答