天天看點

利用圖層制作頁籤

利用 LayerMultiplex 制作頁籤。

效果如下:

利用圖層制作頁籤

LayerMultiplex

MultipleLayer是一種圖層類,繼承自Layer,它支援多路複用孩子節點。

特點:
  • 它支援一個或多個孩子節點
  • 同時隻有一個孩子節點會被激活
作用:
  • 用于管理Layer的切換,而不用切換場景

部分代碼如下:

bool TabControl::init()
{
    if ( !Layer::init() )
    {
        return false;
    }

    Size sz = Director::getInstance()->getVisibleSize();

    /* 建立3個層 */
    LayerColor * w = LayerColor::create(Color4B(, , , ));
    LayerColor * g = LayerColor::create(Color4B(, , , ));
    LayerColor * b = LayerColor::create(Color4B(, , , ));
    m_multilayer = LayerMultiplex::create(w, g, b, nullptr);

    this->addChild(m_multilayer);

    //三個頁籤
    MenuItemImage * itemImage1 = MenuItemImage::create("w_b.png",
        "w_b.png", CC_CALLBACK_1(TabControl::menuCallback, this));
    itemImage2->setTag();

    MenuItemImage * itemImage2 = MenuItemImage::create("r_b.png",
        "r_b.png", CC_CALLBACK_1(TabControl::menuCallback, this));
    itemImage2->setTag();

    MenuItemImage * itemImage3 = MenuItemImage::create("g_b.png",
        "g_b.png", CC_CALLBACK_1(TabControl::menuCallback, this));
    itemImage3->setTag();

    Menu * menu = Menu::create(itemImage1, itemImage2, itemImage3, nullptr);
    menu->alignItemsHorizontallyWithPadding(-);
    menu->setPosition(sz.width / , );
    this->addChild(menu, );

    return true;
}

void TabControl::menuCallback(Ref * pSender)
{
    int item = ((MenuItemImage*)pSender)->getTag();
    if (item != m_curLayerTag)
    {
        m_multilayer->switchTo(item);
        m_curLayerTag = item;
    }
}