本方法只能在CCTableView的扩展类中实现,因为其中的计算方法依赖于CCTableView的protected方法。
具体代码如下:
void scrollToCellIndex(int index) { CCPoint offset = ccpSub(CCPointZero, _offsetFromIndex(index)); float newX, newY; CCPoint maxInset, minInset; maxInset = this->maxContainerOffset(); minInset = this->minContainerOffset(); //check to see if offset lies within the inset bounds newX = MIN(offset.x, maxInset.x); newX = MAX(newX, minInset.x); newY = MIN(offset.y, maxInset.y); newY = MAX(newY, minInset.y); setContentOffset(ccp(newX, newY), true); }
补充:
后来参考其他博文,发现Direction和VerticalFillOrder其实是开放出来的,可以自行计算得到,而不是一定要通过protected function依赖的。
贴上lua方法:
-- 追加滚动到指定位置的方法 -- dataSource需要从外部传入,因为quick-cocos2d-x的CCTableView.toua中没有提供 CCTableViewDataSource* getDataSource() local dataSource = params.dataSource t.scrollToCellIndex = function(self, index) local direction = self:getDirection() local verticalFillOrder = self:getVerticalFillOrder() local offsetX = 0 local offsetY = 0 -- 单元格大小 local cellSize = dataSource:cellSize(self) -- 总数 local itemCounts = dataSource:numberOfCells(self) -- 根据方向计算偏移量 if direction == kCCScrollViewDirectionVertical then if verticalFillOrder == kCCTableViewFillTopDown then offsetY = -cellSize.height * (itemCounts - index - 1) else offsetY = -cellSize.height * index; end else if verticalFillOrder == kCCTableViewFillTopDown then offsetX = -cellSize.width * (itemCounts - index - 1) else offsetX = -cellSize.width * index end end -- 检查偏移量是否越界 local maxInset = self:maxContainerOffset(); local minInset = self:minContainerOffset(); offsetX = math.min(offsetX, maxInset.x); offsetX = math.max(offsetX, minInset.x); offsetY = math.min(offsetY, maxInset.y); offsetY = math.max(offsetY, minInset.y); self:setContentOffset(ccp(offsetX, offsetY), true); end
参考博文:http://blog.csdn.net/wzq9706/article/details/9105915
相关推荐
提供的源码可以帮助开发者更深入地理解CCTableView的工作原理,通过阅读和调试代码,可以学习到如何实现Cell的动态生成、滚动效果以及数据更新。 8. **实际应用示例**: 举例说明CCTableView在游戏菜单、角色选择...
CCTableView是Cocos2d-x提供的一种可滚动视图组件,类似于iOS的UITableView或Android的ListView,用于展示大量数据并支持动态加载和滚动效果。 在JSBinding过程中,开发者首先需要为CCTableView的C++接口创建对应的...
初始化`CCTableView`需要指定其方向(水平或垂直),内容大小以及数据源对象。数据源对象必须遵循`CCTableViewDataSource`协议,提供创建单元格和计算单元格数量的方法。 ```cpp CCTableView* tableView = ...
通过深入研究这个实例源码,开发者不仅可以学习如何在cocos2d-x项目中集成 `CCScrollView` 和 `CCTableView`,还能了解到如何优化性能,处理用户交互,以及如何自定义视图样式。这对于构建具有复杂用户界面的游戏或...
`CCTableView`通常用于显示可滚动的数据列表,而`CCArry`则是一种数据结构,用于存储和管理对象集合。在本项目中,“CCTableView CCArry 组合”意味着开发者正在尝试将这两种组件结合使用,以实现一个动态加载和展示...
5. **滚动与选择**:`CCTableView` 自动处理用户的滚动操作,你可以监听`scrollViewDidScroll` 事件来进行滚动过程中的动画效果。选择事件通常通过`table:cellAtIndex:` 回调处理,此时可以根据选中的关卡信息来切换...
当创建`CCTableView`时,你需要指定单元格的类和一个回调函数,这个函数将被用来创建新的单元格实例。回调函数通常会创建并返回一个新的`CustomTableViewCell`实例: ```cpp CCTableView* tableView = ...
对cocos2d-js中CCTableView的简易封装,可直接使用,包含用例,数据源可使用Array和object,支持cell间距等若干属性的定制,支持每个cell里包含多个元素。优化了滑动过程中刷新时得抖动现象
cocos2d-x 实现 ,其中用到 ccscrollview cctableview 等,及自己写的 饼状图控件
virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx); void setSkillExchangeUnID(uint32_t ID); void ReleaseParentInfo(); public: ...
UI部分一直是cocos2d-x的弱项,而这种境况在3.0版本中将得到改善。让我们从一个曾经的坑入手——CCTableView,来看看这些新特性。相关博客:http://blog.csdn.net/fansongy/article/details/16950241