MenuItemToggle的使用
2015-07-24 09:07
441 查看
在使用Mneu的时候,我们通常会使用MenuItem来创建Menu,而MenuItem的子类有很多,如下图:
![](http://img.blog.csdn.net/20150724090849356?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
我们经常会使用到的就是MenuItemImage和MenuItemSprite,在这里,就讲讲MenuItemToggle的用处和用法。
MeniItemToggle:它在内部拥有一个MenuItem数组,用来负责展示不同的按钮状态。因为使用了一个菜单按钮的数组,所以此类的对象可以实现状态切换。
//通过容器来创建一个MenuItemToggle
static MenuItemToggle * createWithCallback(const ccMenuCallback& callback, constVector<MenuItem*>& menuItems);
//通过一系列MenuItem来创建一个MenuItemToggle,最后要以NULL结尾
static MenuItemToggle* createWithCallback(const ccMenuCallback& callback, MenuItem*item, ...) CC_REQUIRES_NULL_TERMINATION;
MenuItemToggle实现了显示内容的切换,所切换之后显示的内容由你在创建时所添加的MenuItem的内容和顺序有关,默认显示第一个MenuItem。
既然MenuItemToggle能够显示内容的切换,那么我们可以用它来实现单选按钮或者多选按钮之类的功能,点击显示选中状态,再次点击显示未选中状态。
在有些游戏的设置界面中,就有点击切换选中与没选中状态来实现是否开启或关闭音乐的功能,那么这个控件就可以通过MenuItemToggle来实现,如下图:
![](http://img.blog.csdn.net/20150724092034768?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面我们来实现这种控件:
首先创建MenuItemToggle,然后通过其创建Menu
//选中状态精灵
auto musicOnSpr=Sprite::createWithSpriteFrameName("Hook.png");
//未选中状态精灵
auto musicOffSpr=Sprite::createWithSpriteFrameName("unchecked.png");
//将精灵包装成MenuItem,以便创建MenuItemToggle
auto musicOn=MenuItemSprite::create(musicOnSpr, musicOnSpr);
auto musicOff=MenuItemSprite::create(musicOffSpr, musicOffSpr);
//创建MenuItemToggle,第一个参数是回调函数 后面依次是要显示的MenuItem,最后必须为NULL
MenuItemToggle* musicItemToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SetLayer::menuCallBack, this), musicOn,musicOff, NULL);
musicItemToggle->setPosition(Vec2(320, 457));
//通过MenuItemToggle创建Menu
auto menu=Menu::create(musicItemToggle,NULL);
menu->setPosition(Vec2(0, 0));
this->addChild(menu);
我们再来看看回调函数void SetLayer::menuCallBack(Ref* ref)
参数Ref表示被点击的MenuItem
void SetLayer::menuCallBack(Ref* ref)
{
//将ref转换为MenuItemToggle对象
auto item=(MenuItemToggle*)ref;
/*获取当前显示内容的下标,可以通过下标知道当前控件所显示的内容,在创建MenuItemToggle时,第一个被添加到MenuItemToggle的MenuItem的下标为0,第二个被添加到MenuItemToggle的MenuItem的下标为1,以此类推,在这里,显示musicOn时,getSelectedIndex的值为0,显示musicOff时,getSelectedIndex的值为1*/
item->getSelectedIndex();
//再根据显示内容实现不同操作
........
}
我们经常会使用到的就是MenuItemImage和MenuItemSprite,在这里,就讲讲MenuItemToggle的用处和用法。
MeniItemToggle:它在内部拥有一个MenuItem数组,用来负责展示不同的按钮状态。因为使用了一个菜单按钮的数组,所以此类的对象可以实现状态切换。
//通过容器来创建一个MenuItemToggle
static MenuItemToggle * createWithCallback(const ccMenuCallback& callback, constVector<MenuItem*>& menuItems);
//通过一系列MenuItem来创建一个MenuItemToggle,最后要以NULL结尾
static MenuItemToggle* createWithCallback(const ccMenuCallback& callback, MenuItem*item, ...) CC_REQUIRES_NULL_TERMINATION;
MenuItemToggle实现了显示内容的切换,所切换之后显示的内容由你在创建时所添加的MenuItem的内容和顺序有关,默认显示第一个MenuItem。
既然MenuItemToggle能够显示内容的切换,那么我们可以用它来实现单选按钮或者多选按钮之类的功能,点击显示选中状态,再次点击显示未选中状态。
在有些游戏的设置界面中,就有点击切换选中与没选中状态来实现是否开启或关闭音乐的功能,那么这个控件就可以通过MenuItemToggle来实现,如下图:
下面我们来实现这种控件:
首先创建MenuItemToggle,然后通过其创建Menu
//选中状态精灵
auto musicOnSpr=Sprite::createWithSpriteFrameName("Hook.png");
//未选中状态精灵
auto musicOffSpr=Sprite::createWithSpriteFrameName("unchecked.png");
//将精灵包装成MenuItem,以便创建MenuItemToggle
auto musicOn=MenuItemSprite::create(musicOnSpr, musicOnSpr);
auto musicOff=MenuItemSprite::create(musicOffSpr, musicOffSpr);
//创建MenuItemToggle,第一个参数是回调函数 后面依次是要显示的MenuItem,最后必须为NULL
MenuItemToggle* musicItemToggle=MenuItemToggle::createWithCallback(CC_CALLBACK_1(SetLayer::menuCallBack, this), musicOn,musicOff, NULL);
musicItemToggle->setPosition(Vec2(320, 457));
//通过MenuItemToggle创建Menu
auto menu=Menu::create(musicItemToggle,NULL);
menu->setPosition(Vec2(0, 0));
this->addChild(menu);
我们再来看看回调函数void SetLayer::menuCallBack(Ref* ref)
参数Ref表示被点击的MenuItem
void SetLayer::menuCallBack(Ref* ref)
{
//将ref转换为MenuItemToggle对象
auto item=(MenuItemToggle*)ref;
/*获取当前显示内容的下标,可以通过下标知道当前控件所显示的内容,在创建MenuItemToggle时,第一个被添加到MenuItemToggle的MenuItem的下标为0,第二个被添加到MenuItemToggle的MenuItem的下标为1,以此类推,在这里,显示musicOn时,getSelectedIndex的值为0,显示musicOff时,getSelectedIndex的值为1*/
item->getSelectedIndex();
//再根据显示内容实现不同操作
........
}
相关文章推荐
- UIProgressView和UISlider
- iOS中UITableview实现跨区域拖动效果的实现
- No parameter name specified for argument of type
- Arduino定时计数器 0、1、2的灵活使用
- druid连接池配置
- Swing中耗时任务需要另起新线程,这个新线程中更新GUI的操作仍需由EDT来做(转)
- ZOJ Problem Set - 1649 Rescue BFS+优先队列
- pat 1007. Maximum Subsequence Sum (25)
- Round #313 (Div. 2) D. Equivalent Strings
- IOS UIPanGestureRecognizer手势使用及识别状态UIGestureRecognizerState
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
- C#高级编程五十三天----字典Dictionary<TKey,TValue>
- bluetooth uuid
- Reveal的使用,妈妈在也不担心UI了
- uinty脚本c#(学习笔记)
- 关于String和StringBuilder、StringBuffer的一个简单性能测试
- pt-query-digest查询日志分析工具
- druid连接池配置
- SequenceInputStream 输入流的串联
- hdu 1242 rescue