cocos2dx TableView 在手机上滑动很慢和优化(点按钮不能滑动和跳到指定位置等)

宋朝
2023-12-01

环境:Cocos2dx版本3.17.2

Cocos2dx中的ListView 有多少个cell 就会创建多少个cell

而tableview的实现是最多创建展示窗口cell数量n+1个cell 然后这些cell都重复使用的,所以绘制UI的时候效率更高效,但是有几点需要优化

1.滑动太慢

修改CCScrollview.cpp中的

BOUNCE_BACK_FACTOR

#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32 
#define BOUNCE_BACK_FACTOR   0.35f
#else
#define BOUNCE_BACK_FACTOR   0.05f
#endif

2.超出滑动区域的cell还可以点击

可以将tableview添加在一个Layout上,然后设置Layout裁切内容

Panel_tableview:addChild(self._tableView)

3.cell上面的UIButton按钮影响了tableview的滑动

    --让按钮可以在tableview中滑动
    Button_more:setSwallowTouches(false) 

4.判断是否滑动到底部

添加监听scrollview是否滚动SCROLLVIEW_SCRIPT_SCROLL

self._tableView:registerScriptHandler(handler(self,self.scrollViewDidScroll),cc.SCROLLVIEW_SCRIPT_SCROLL)
function MyTableViewLayer:scrollViewDidScroll(tableView)
    print("tableview 正在滚动")
    
    local offset = tableView:getContentOffset()
    dump(offset)
    if offset.y > 0 then
        print(""已经滑动到底部了"")

    end

end

5.刷新数据后跳转到指定位置

需要计算出刷新前后的tableveiw 总contentsize的高度变化 然后用当前的offset位置减去高度变化就是当前需要跳转到的位置

用 setContentOffset(cc.p(x,y)) 接口

--跳转到指定位置
    local offset1 = self._tableView:getContentOffset()      --刷新前的位置
    local contentsize1 = self._tableView:getContentSize()   --刷新前的tableview大小
   
    self._tableView:reloadData()
    local contentsize2 = self._tableView:getContentSize()   --刷新后的tableview大小
    
    local heightChange = (contentsize2.height - contentsize1.height)    --刷新前后高度变化
    if contentsize1.height > 0 and heightChange > 0 then
        self._tableView:setContentOffset(cc.p(offset1.x, offset1.y - heightChange ))    --重新计算需要跳转到的位置
    end

 类似资料: