分享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方法注释,有改进意见欢迎指正。

