环境: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