利用 LayerMultiplex 制作选项卡。
效果如下:
LayerMultiplex
MultipleLayer是一种图层类,继承自Layer,它支持多路复用孩子节点。
特点:
- 它支持一个或多个孩子节点
- 同时只有一个孩子节点会被激活
作用:
- 用于管理Layer的切换,而不用切换场景
部分代码如下:
bool TabControl::init()
{
if ( !Layer::init() )
{
return false;
}
Size sz = Director::getInstance()->getVisibleSize();
/* 创建3个层 */
LayerColor * w = LayerColor::create(Color4B(255, 0, 0, 100));
LayerColor * g = LayerColor::create(Color4B(0, 255, 0, 100));
LayerColor * b = LayerColor::create(Color4B(0, 0, 255, 100));
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(0);
MenuItemImage * itemImage2 = MenuItemImage::create("r_b.png",
"r_b.png", CC_CALLBACK_1(TabControl::menuCallback, this));
itemImage2->setTag(1);
MenuItemImage * itemImage3 = MenuItemImage::create("g_b.png",
"g_b.png", CC_CALLBACK_1(TabControl::menuCallback, this));
itemImage3->setTag(2);
Menu * menu = Menu::create(itemImage1, itemImage2, itemImage3, nullptr);
menu->alignItemsHorizontallyWithPadding(-1);
menu->setPosition(sz.width / 2, 25);
this->addChild(menu, 1);
return true;
}
void TabControl::menuCallback(Ref * pSender)
{
int item = ((MenuItemImage*)pSender)->getTag();
if (item != m_curLayerTag)
{
m_multilayer->switchTo(item);
m_curLayerTag = item;
}
}