[Scrollview] Use multiple scrollview in Scene

Hello,

I need some help :
I develop a game with cocos2dx-v3.0-rc0

I have a small problem. I would want to implement two scrollviews on my scene. Every scrollviews possesses a layer which he even possess several MenuItemImage. My problem it is because when I make a swipe wherever on my screen, both scrollviews move. I would want that they move independently one of the other one and especially than when we swipe on their contents. Moreover, when my swipe gesture begins on an MenuItemImage, nothing takes place.
Know you how I can implement this behavior?
Thank you beforehand.

I add attachement to illustrate my scene (red and green reprensent scrollview and blue it’s MenuItemImage)


View.png (11.3 KB)

@fantalbala

What does your code look like?

The both scrollview is class Node CCScrollView

For my first scrollView :

    //create the scrollview
void ModelLayer::createScrollView(Ref* sender)
{
    int cpt = 0;
    
    if (sender==NULL) {
        this->initArrayImages(0);
    }
    else
    {
        this->initArrayImages(((MenuItem*)sender)->getTag());
    }
    
    this->removeChild(menu);
    menu = Layer::create();
    for (int i = 0; i<arrayImages->count(); i+=kNbModule) {
        Layer * subMenu = this->createLayer(cpt);     //Create Layer create a layer with Menu and MenuItemImage
        subMenu->setPosition((subMenu->getContentSize().width * (i/kNbModule)), subMenu->getPosition().x);
        subMenu->setTag(cpt/kNbModule);
        cpt += kNbModule;
        menu->addChild(subMenu);
        menu->setContentSize(Size(winSize.width*cpt/kNbModule,subMenu->getContentSize().height));
    }

    nbPage = cpt/kNbModule;
    currentPage = 0;
    this->removeChild(scrollview);
    scrollview = ScrollView::create(Size(winSize.width-(flecheDroite->getContentSize().width-flechGauche->getContentSize().width), menu->getContentSize().height));
    scrollview->setContainer(menu);
    scrollview->setDirection(ScrollView::Direction::HORIZONTAL);
    scrollview->setBounceable(false);
    scrollview->updateInset();
    menu->setTag(100);
    
    this->addChild(scrollview);
    
    if (cpt - kNbModule > 0) {
        flecheDroite->setVisible(true);
        scrollview->setTouchEnabled(true);
    }
    else
    {
        flecheDroite->setVisible(false);
        scrollview->setTouchEnabled(false);
    }
}

And my second scrollviw :

   //create bottom Label
void ModelLayer::createPanel()
{
    panel = Layer::create();
    
    Sprite *backgroundList = Sprite::create("background_menu.png");
    backgroundList->setPosition(Point::ZERO);
    backgroundList->setAnchorPoint(Point::ZERO);
    panel->addChild(backgroundList);

        //Create the vignette
    this->createDataVignette();
    Menu *list = Menu::create();
    
    for (int i = 0; i < arrayImages->count(); i++)
    {
        __String * name = (__String*)arrayImages->getObjectAtIndex(i);
        MenuItemImage * vignette = MenuItemImage::create(name->getCString(),name->getCString(),CC_CALLBACK_1(ModelLayer::createScrollView,this));
        vignette->setTag(i);
        list->addChild(vignette);
    }
    list->alignItemsHorizontally();
    list->setAnchorPoint(Point::ZERO);
    list->setPosition(Point(500,65));
    Layer *layerList = Layer::create();
    layerList->addChild(list);
    layerList->setAnchorPoint(Point::ZERO);
    layerList->setPosition(Point::ZERO);
    layerList->setContentSize(list->getContentSize());

        // list->setContentSize(backgroundList->getContentSize());

    ScrollView * scrollviewList = ScrollView::create(Size(winSize.width, layerList->getContentSize().height));
    scrollviewList->setContainer(layerList);
    scrollviewList->setDirection(ScrollView::Direction::HORIZONTAL);
    scrollviewList->setBounceable(false);
    panel->addChild(scrollviewList);
    
    MenuItemImage *homeButton = MenuItemImage::create("btn_accueil.png", "btn_accueil.png", CC_CALLBACK_1(ModelLayer::goHome,this));
    homeButton->setPosition(Point(backgroundList->getContentSize().width-homeButton->getContentSize().width*6/5, backgroundList->getContentSize().height));
    homeButton->setAnchorPoint(Point::ZERO);
    
    Sprite * upButton = Sprite::create("btn_up.png");
    upButton->setPosition(Point(backgroundList->getContentSize().width/2, backgroundList->getContentSize().height + upButton->getContentSize().height/2));
    upButton->setTag(kTagUp);
    Menu * buttons = Menu::create(homeButton, NULL);
    buttons->setPosition(Point::ZERO);
    
    panel->addChild(buttons);
    panel->addChild(upButton);
    
//    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, upButton);
    
    this->addChild(panel);
}

Ok i’m noob :slight_smile: the content size of my scrollview corresponding to the windows size (because subview don’t have a good content size).

I have an other question, it’s possible to add page controller in the scrollview ?

Hi, @fantalbala
Could you upload the demo including resources?

I’m sorry but I can’t :confused: