Cocos 的PickerView组件实现

分享3年前一个手游项目写的一个组件,仿iOS UIkit实现一个PickerView。

之前是用v2.x版本写的,已改成v3.x的API。

下图是iOS的UIPickerView

以下我实现的组件预览截图


    UINumberPicker *picker = UINumberPicker::create();
    // set the cell size
    picker->setItemSize(100, 22);
    // set the data show five items,the minimize value is 1,the max is 55, default show 1;
    picker->setDataprovider(5, 1, 55,1);
    picker->setPosition(100, 30);             //set the postions
    this->addChild(picker);
    picker->setSkin("res/pickerBg.png", "res/pickerSelectionIndicator.png");
    
    picker->valueChangeHandler = std::bind(&HelloWorld::pickerChangeHandler,this, std::placeholders::_1);


void HelloWorld::pickerChangeHandler(cocos2d::Node *pnode)
{
    auto picker = dynamic_cast<UINumberPicker*>(pnode);
    CCLOG("选择的是 %d",picker->getValue());
}

外观和交互操作类似iOS picker,可点可滑可拖,建议真机上用手指滑动,相信我,体验远超鼠标操作。

代码框架是仿ScrollView的源码,包括内容裁剪、缓动动画处理等等。

这是源码下载地址,c++写的,没用到特殊api,头文件有public方法注释,有改进意见欢迎指正。

http://pan.baidu.com/s/14tNVw,1

1赞

感谢楼主慷慨分享啊,好东西必须顶一个

试了下,貌似只能显示一列?显示多列要手动创建多个picker吗?:9:

本来也正在做一个仿的UIPickerView,结果发现了楼主的。为毛之前搜索没搜到:6:

多列直接创建多个Picker,相信没多少工作量。

— Begin quote from ____

引用第4楼haroel于2016-01-07 15:45发表的 回 2楼(gemini双子) 的帖子 :
多列直接创建多个Picker,相信没多少工作量。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=327097&pid=1475486

— End quote

裁剪很消耗性能的。能少则少

是的,说的有理,多列可以公用一个裁剪封装一下

楼主,可以麻烦再发一遍吗?百度云上的已经被删了

没有下载链接了,可以放到github上?

LZ能不能再放一个,百度上连接失效了。

最近较忙,没怎么看论坛,另外上次百度云事件,网盘莫名其妙被清空,地址也失效了,所以再放一次
https://pan.baidu.com/s/1jI0hn6Y

https://pan.baidu.com/s/1jI0hn6Y