cocos scrollview自实现重复利用item

 1 function lxb.CoinsRankLayer:scrollViewUpdate(scrollView, visableHeight, lastY)
 2     if scrollView == nil then
 3         return 0;
 4     end
 5 
 6     -- 获取当前的innerY 滑动方向
 7     local curInnerY = math.floor(scrollView:getInnerContainer():getPositionY());
 8     local isScroll2Down = curInnerY > lastY;
 9     local Items = scrollView:getChildren();
10 
11     if #Items < LIMIT_COUNT then
12         return
13     end
14     -- 根据滑动方向对当前items进行排序 并获得第一个需要复用的item的Y
15     local reuseItemY = 0;
16     if isScroll2Down then
17         -- 大到小  高到低
18         table.sort(Items, function(a, b)
19             return a:getPositionY() > b:getPositionY();
20         end )
21         reuseItemY = Items[#Items]:getPositionY();
22     else
23         -- 小到大
24         table.sort(Items, function(a, b)
25             return a:getPositionY() < b:getPositionY();
26         end )
27 
28         -- 获取顶部边界坐标
29         reuseItemY = Items[#Items]:getPositionY() + Items[#Items]:getContentSize().height;
30     end
31 
32     for i = 1, #Items, 1 do
33         local item = Items[i];
34         if isScroll2Down then
35             if lxb.ScrollViewFunc:getItemPositionY(self.listView, item) > visableHeight then
36                 if item.itemData.dataIndex == nil or item.itemData.dataIndex == 0 then break end
37                 print("isScroll2Down item.itemData.dataIndex=  curInnerY=", item.itemData.dataIndex, curInnerY);
38                 local dataIndex = item.itemData.dataIndex + LIMIT_COUNT;
39                 -- 获取数据Id
40                 local data = self:getDataByIndex(dataIndex);
41                 if data == nil then break end
42                 print("isScroll2Down item.itemData.dataIndex continue");
43                 item:resetPlayerInfoItemInfo(data);
44                 local posY = reuseItemY - item:getContentSize().height;
45                 -- 获取要设置的底部坐标
46                 reuseItemY = posY;
47                 item:setPositionY(posY);
48             end
49         else
50             if lxb.ScrollViewFunc:getItemPositionY(self.listView, item) + item:getContentSize().height < -0 then
51                 if item.itemData.dataIndex == nil or item.itemData.dataIndex == 0 then break end
52                 local dataIndex = item.itemData.dataIndex - LIMIT_COUNT;
53                 -- 获取数据Id
54                 local data = self:getDataByIndex(dataIndex);
55                 if data == nil then break end
56                 item:resetPlayerInfoItemInfo(data);
57                 item:setPositionY(reuseItemY);
58                 reuseItemY = reuseItemY + item:getContentSize().height;
59             end
60         end
61     end
62     return curInnerY;
63 end
item.itemData自己维护该数据

posted on 2019-12-25 16:30  kk波波  阅读(733)  评论(0)    收藏  举报

导航