CCScrollView не глотает прикосновения в cocos2dx
Я использую CCScrollView во всплывающей вкладке, которая перекрывает некоторые существующие элементы управления на экране. Проблема в том, что, хотя CCScrollView правильно реагирует на прикосновения, прикосновения не проглатываются, поэтому элементы управления под ним также реагируют на них.
Я проверил, что элемент управления регистрирует себя как целевой делегат с TouchDispatcher, и я фактически установил точку останова на "возвращаемом истине" в CCScrollView::ccTouchBegan и наблюдал, как он ударил его, но касания все еще передавались элементам управления, находящимся под ним.
Я не мог найти много об этом на SO, но я обнаружил, что кто-то имел эту проблему некоторое время назад в обычном cocos2d:
http://www.cocos2d-iphone.org/forums/topic/making-ccscrollview-swallow-touches-but-still-scroll/
к сожалению, единственный ответ там не помог.
Я чувствую, что, должно быть, упускаю что-то простое, но я почти на грани ума. Любой совет, что я делаю не так?
2 ответа
Я вернулся к проблеме после перерыва и после некоторого разочарования обнаружил, что CCScrollView действительно действительно хочет этого поведения. Из строк 133-136 в CCScrollView.cpp:
void CCScrollView::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, CCLayer::getTouchPriority(), false);
}
Это ложное в конце, конечно, виновник.
Я полностью в неведении, почему кто-то хотел бы, чтобы это было поведением по умолчанию, но по крайней мере мой код работает сейчас.
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);
}