`
song020cn
  • 浏览: 63345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CCTableView滚动到指定位置

阅读更多

本方法只能在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

0
1
分享到:
评论

相关推荐

    Cocos2d-X CCTableview

    提供的源码可以帮助开发者更深入地理解CCTableView的工作原理,通过阅读和调试代码,可以学习到如何实现Cell的动态生成、滚动效果以及数据更新。 8. **实际应用示例**: 举例说明CCTableView在游戏菜单、角色选择...

    JSBinding test --CCTableView

    CCTableView是Cocos2d-x提供的一种可滚动视图组件,类似于iOS的UITableView或Android的ListView,用于展示大量数据并支持动态加载和滚动效果。 在JSBinding过程中,开发者首先需要为CCTableView的C++接口创建对应的...

    CCTableView使用详解

    初始化`CCTableView`需要指定其方向(水平或垂直),内容大小以及数据源对象。数据源对象必须遵循`CCTableViewDataSource`协议,提供创建单元格和计算单元格数量的方法。 ```cpp CCTableView* tableView = ...

    cocos2d-x CCScrollView和CCTableView的使用 实例源码

    通过深入研究这个实例源码,开发者不仅可以学习如何在cocos2d-x项目中集成 `CCScrollView` 和 `CCTableView`,还能了解到如何优化性能,处理用户交互,以及如何自定义视图样式。这对于构建具有复杂用户界面的游戏或...

    CCTableView CCArry 组合

    `CCTableView`通常用于显示可滚动的数据列表,而`CCArry`则是一种数据结构,用于存储和管理对象集合。在本项目中,“CCTableView CCArry 组合”意味着开发者正在尝试将这两种组件结合使用,以实现一个动态加载和展示...

    cocos2d-x 游戏关卡选择的设计

    5. **滚动与选择**:`CCTableView` 自动处理用户的滚动操作,你可以监听`scrollViewDidScroll` 事件来进行滚动过程中的动画效果。选择事件通常通过`table:cellAtIndex:` 回调处理,此时可以根据选中的关卡信息来切换...

    Cocos2d-x CCTableiew修改不同Size的cell

    当创建`CCTableView`时,你需要指定单元格的类和一个回调函数,这个函数将被用来创建新的单元格实例。回调函数通常会创建并返回一个新的`CustomTableViewCell`实例: ```cpp CCTableView* tableView = ...

    XLTableView.js

    对cocos2d-js中CCTableView的简易封装,可直接使用,包含用例,数据源可使用Array和object,支持cell间距等若干属性的定制,支持每个cell里包含多个元素。优化了滑动过程中刷新时得抖动现象

    cocos2d-x 实现 的移动监管 demo

    cocos2d-x 实现 ,其中用到 ccscrollview cctableview 等,及自己写的 饼状图控件

    cocos2d-x TableView 分析

    virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx); void setSkillExchangeUnID(uint32_t ID); void ReleaseParentInfo(); public: ...

    Cocos2d-x 3.0 开发(十四)使用UIScrollView 实现大小不同物品拖动展示

    UI部分一直是cocos2d-x的弱项,而这种境况在3.0版本中将得到改善。让我们从一个曾经的坑入手——CCTableView,来看看这些新特性。相关博客:http://blog.csdn.net/fansongy/article/details/16950241

Global site tag (gtag.js) - Google Analytics