-----------------------------------------------------
-- Module Charts
-- Dialog视图模板
-----------------------------------------------------
module( "Charts",package.seeall )
setmetatable(Charts,{__index = dialog_t})
---------------------------实例变量--------------------------
local instance = nil
local NUM_PER_PAGE_0 = 10 --初始化时加载的个数
local ITEM_NUM = 28 -- 4 * 7 = 28 区间定为 28 ,同时最多 28 个(待定) ITEM , 初始加载 10 个,然后加至 28 ,保持不变
local ITEM_NUM_4 = 7 -- 分了四部分
local LOAD_INTERVAL = 0.1 -- 加载一个新的item的时间间隔
local MARGIN = 0
local sharedScheduler = cc.Director:getInstance():getScheduler() --cc.Director:getInstance():getScheduler():scheduleScriptFunc
----------------------------实例的创建与销毁-------------------------
function getInstance()
instance = instance or new()
return instance
end
function destroyInstance()
if instance then
instance:dispose()
instance = nil
end
end
-----------------------------------------------------
function new()
local this = {}
setmetatable(this,{__index = Charts})
this:init()
return this
end
------------------------------实例的UI初始化-----------------------
function init(self)
dialog_t.init(self)
self._name = "Charts"
self._layout = Global.getInstance():loadUI("", self._name)
self._core:addChild(self._layout)
self:initRegister()
end
-------------------------------实例UI对象的初始化与绑定----------------------
function controlRegister(self)
-- self.xxxx = Global.getInstance():getUINodeLoopByName(self._layout, "xxxx")
--
-- self.xxxx_list = Global.getInstance():getUINodeLoopByName(self._layout, "xxxx_list")
-- self.xxxx_list:setBounceEnabled(true)
-- self.xxxx_list:setItemsMargin(4.0)
-- self.xxxx_list:setItemModel(Global.getInstance():loadUI("", "xxxx_item"))
--
-- Global.getInstance():UIEventRegister("ended", self._name, self.xxxx, "btnxxxx")
self.lsv_main = Global.getInstance():getUINodeLoopByName(self._layout, "ListView_2")
local itemUI = Global.getInstance():loadUI("", "ChartsCell")
--self.item = Global.getInstance():getUINodeLoopByName(itemUI, "Panel_1")
--self.item:retain()
--self.lsv_main:setItemModel(self.item)
self.inner = self.lsv_main:getInnerContainer()
self.lsv_main:setItemsMargin(MARGIN)
self.btn_1 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9") --三个subType
self.btn_2 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9_0")
self.btn_3 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9_0_0")
self.btn_back = Global.getInstance():getUINodeLoopByName(self._layout, "Button_4")
Global.getInstance():UIEventRegister("ended", self._name, self.btn_1, "Btn_subType",nil, 1)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_2, "Btn_subType",nil, 2)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_3, "Btn_subType",nil, 3)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_back, "Btn_back")
self.lsv_main:addScrollViewEventListener(ListScrollViewEvent)
local function load0()
self:load_next_items_to_tail_0(1)
end
local function load1()
self:load_next_items_to_head(1)
end
local function load2()
self:load_next_items_to_tail(1)
end
local function onTouchBegan(touch, event)
self.delY = 0
return true
end
local function onTouchMoved(touch, event)
self.delY = touch:getLocation().y - touch:getPreviousLocation().y
if not self.PHASE_0_END then --加载一个item时,弹性消失一瞬间
if self.delY < 0 then
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0', 'NotNil')
end
else
if self.handle0 == nil then
self.handle0 = self:scheduleGlobalWithTime(load0, LOAD_INTERVAL, ITEM_NUM - (self.iTail - self.iHead + 1), 'handle0') -- times <= 0 也会执行一次
end
end
end
end
local function onTouchEnded(touch, event) --加载新item时,弹性消失
if self.PHASE_0_END then
local yInner = self.inner:getPositionY() --lsv_main 和世界坐标系是平移关系
local yHead = self.lsv_main:getItem(0):getPositionY() + yInner
local yTail = self.lsv_main:getItem(self.iTail - self.iHead):getPositionY() + yInner
local yScv = self.lsv_main:getPositionY()
local y = touch:getLocation().y
y = y - yScv -- 比较 yHead - y , y - yTail
if y - yTail < yHead - y then -- 在下部
if self.delY > 0 then --往下走
if self.handle1 ~= nil then --这两个判断顺序不能变,见 self:unschedule
self:unscheduleGlobal('handle1')
end
if self.handle2 == nil then --简单起见可以不考虑加载到头的情形
self.handle2 = self:scheduleGlobalWithTime(load2, LOAD_INTERVAL, ITEM_NUM_4, 'handle2')
end
end
else --在上部
if self.delY < 0 then --往上走
if self.handle2 ~= nil then
self:unscheduleGlobal('handle2')
end
if self.handle1 == nil then
self.handle1 = self:scheduleGlobalWithTime(load1, LOAD_INTERVAL, ITEM_NUM_4, 'handle1')
end
end
end
end
end
self.listener1 = cc.EventListenerTouchOneByOne:create()
self.listener1:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
self.listener1:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
self.listener1:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
cc.Director:getInstance():getEventDispatcher():addEventListenerWithFixedPriority(self.listener1, -1)
end
----------------------------消息注册-------------------------
function messageRegister(self)
-- self.listener1 = Global.getInstance():UIMessageRegister("xxxx", self._name)
end
-----------------------------消息清除------------------------
function messageUnRegister(self)
-- Global.getInstance():UIMessageUnRegister(self.listener1)
end
------------------------------消息触发回调-----------------------
function onMessage(self, name, data)
if "xxxx" == name then
elseif "" == name then
end
end
---------------------------通知注册--------------------------
function noticeRegister(self)
-- self.notice = Global.getInstance():UINoticeRegister("xxxx", self._name)
end
----------------------------通知清除-------------------------
function noticeUnRegister(self)
-- Global.getInstance():UINoticeUnRegister(self.notice)
end
-----------------------------通知触发回调------------------------
function onNotice(self, name, data)
if "xxxx" == name then
elseif "" == name then
end
end
-----------------------------初始化------------------------
function initRegister(self)
self:controlRegister()
self:messageRegister()
self:noticeRegister()
end
function releaseRegister( self )
self:messageUnRegister()
self:noticeUnRegister()
end
-----------------------------场景开始载入回调------------------------
function onEnter(self)
print(self._name .. " => " .. "onEnter")
self.subType = 1 --默认
self:set_item_model()
self:Init()
end
------------------------------场景清除回调-----------------------
function onExit(self)
print(self._name .. " => " .. "onExit")
self:doClear()
--self.item:release()
if self.listener1 ~= nil then --有内置的self.listener!
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.listener1)
self.listener1 = nil
end
end
function doClear(self)
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0')
end
if self.handle1 ~= nil then
self:unscheduleGlobal('handle1')
end
if self.handle2 ~= nil then
self:unscheduleGlobal('handle2')
end
if self.handle_can_load ~= nil then --有限次计时器也要释放,否则关闭页面后会出问题(self = nil)
self:unscheduleGlobal('handle_can_load')
end
if self.handle_inner_pos ~= nil then
self:unscheduleGlobal('handle_inner_pos')
end
end
-------------------------------实例销毁----------------------
function dispose(self)
self:releaseRegister()
if self._core then
self._core:removeFromParent(true)
self._core = nil
end
dialog_t.dispose(self)
end
--------------------------------UI刷新---------------------
function refreshUI(self)
end
function refreshData(self)
end
----------------------------响应-------------------------
function btnXXXX(self, sender, param)
end
function Btn_back(self, sender, param)
Dialogs.getInstance():closeDialog(self._name)
end
function Btn_subType(self, sender, param)
self:doClear()
self.subType = param
self:Init()
end
function ListScrollViewEvent(sender, evenType)
local self = getInstance()
local function set_can_load()
self.can_load = true
self.inner:setPosition(self.x_record, self.y_record)
end
-- local function set_inner_pos() -- 分开写在倒着滑时竟然出问题。。。
-- self.inner:setPosition(self.x_record, self.y_record)
-- end
if evenType == ccui.ScrollviewEventType.scrollToBottom then
print("BOTTOM")
if self.iTail ~= #self.data and self.can_load then
self.can_load = false
self.lsv_main:jumpToBottom()
--self.handle_inner_pos = Scheduler.performWithDelayGlobal(set_inner_pos, 0)
self.handle_can_load = Scheduler.performWithDelayGlobal(set_can_load, 0) --require scheduler在main里
self:load_next_items_to_tail(ITEM_NUM_4)
end
elseif evenType == ccui.ScrollviewEventType.scrollToTop then
print("TOP" )
if self.iHead ~= 1 and self.can_load then
self.can_load = false
self.lsv_main:jumpToTop()
self.handle_can_load = Scheduler.performWithDelayGlobal(set_can_load, 0)
self:load_next_items_to_head(ITEM_NUM_4)
end
end
end
----------------------------custom-----------------------------
function Init(self )
self.data ={}
for i = 1, 100 do
self.data[i] = i
end
self.can_load =true
self.iHead = 1
self.iTail = 0
self.PHASE_0_END = false --第0阶段结束后再激活其他handle
self.lsv_main:removeAllItems()
self.lsv_main:jumpToTop()
self:set_item_model()
local function load0()
self:load_next_items_to_tail_0(1)
end
self.handle0 = self:scheduleGlobalWithTime(load0, LOAD_INTERVAL, ITEM_NUM - NUM_PER_PAGE_0,'handle0')
self:load_next_items_to_tail(NUM_PER_PAGE_0)
end
function set_an_item(self, item, i)
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3"):setString(tostring(self.data[i]))
end
function load_next_items_to_head(self, num) --同时从tail删除
local start = self.iHead - 1
local bound = math.max(1, self.iHead - num)
self.iHead = bound
local inner_delY = 0
for i = start, bound, -1 do
self.lsv_main:insertDefaultItem(0)
local item = self.lsv_main:getItem(0)
self:set_an_item(item, i)
if self.iTail - i + 1 > ITEM_NUM then -- 保持总数在 ITEM_NUM 个
self.lsv_main:removeItem(self.iTail - i)
inner_delY = inner_delY + (self.item_height + MARGIN)
self.iTail = self.iTail - 1
end
end
local y = self.inner:getPositionY()
self.inner:setPosition(0, y + inner_delY)
self.x_record, self.y_record = self.inner:getPosition()
print('head ' .. self.iHead .. ' ' .. self.iTail .. ' ' .. self.iTail - self.iHead + 1)
end
function load_next_items_to_tail_0(self, num) -- 这里num只传 1
if self.iTail - self.iHead + 1 == ITEM_NUM or self.iTail - self.iHead + 1 == #self.data then
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0') --需要尽快执行 handle2
end
return
end
local start = self.iTail + 1
local bound = math.min(#self.data, self.iTail + num)
self.iTail = bound
for i = start, bound do
print("tail0 " .. i)
self.lsv_main:pushBackDefaultItem()
local item = self.lsv_main:getItem(i - self.iHead)
self:set_an_item(item, i)
end
end
function load_next_items_to_tail(self, num) --同时从head删除
local start = self.iTail + 1
local bound = math.min(#self.data, self.iTail + num)
self.iTail = bound
local inner_delY = 0
for i = start, bound do
self.lsv_main:pushBackDefaultItem()
local item = self.lsv_main:getItem(i - self.iHead)
inner_delY = inner_delY - (self.item_height + MARGIN)
self:set_an_item(item, i)
if i - self.iHead + 1 > ITEM_NUM then --保持总数在 ITEM_NUM 个
self.lsv_main:removeItem(0)
self.iHead = self.iHead + 1
--inner_delY = inner_delY + (self.item_height + MARGIN)
end
end
local y = self.inner:getPositionY()
self.inner:setPosition(0, y + inner_delY)
self.x_record, self.y_record = self.inner:getPosition()
print('tail ' .. self.iHead .. ' ' .. self.iTail .. ' ' .. self.iTail - self.iHead + 1)
end
function set_item_model(self)
--以下注释方法并不能显示item
-- for i = 1,3 do
-- if self.subType == i then
-- Global.getInstance():getUINodeLoopByName(self.item, "Cell" .. i):setVisible(true)
-- else
-- Global.getInstance():getUINodeLoopByName(self.item, "Cell" .. i):setVisible(false)
-- end
-- end
local itemUI = Global.getInstance():loadUI("", "ChartsCell" .. self.subType)
local item = Global.getInstance():getUINodeLoopByName(itemUI, 'Panel_1')
self.item_width = item:getContentSize().width
self.item_height = item:getContentSize().height
self.lsv_main:setItemModel(item) -- 该函数中把item retain 了,但是一般只有手动 retain()的东西才用手动 release().
end
-----------------------借用scheduler.lua代码并修改-----------------------
function unscheduleGlobal(self, name, p) -- self[name] is the handle
sharedScheduler:unscheduleScriptEntry(self[name])
self[name] = nil
if p == nil then
self.PHASE_0_END = true
end
end
-- 有限次数的倒计时, time = 次数
function scheduleGlobalWithTime(self, listener, interval, times, name) -- times <= 0 也会执行一次 , name is string
local handle
local i = times
handle = sharedScheduler:scheduleScriptFunc(function()
i = i - 1
listener(i)
if(i <= 0)then
self:unscheduleGlobal(name)
end
end, interval, false)
return handle
end
--仅执行一次
function performWithDelayGlobal(self, listener, time, name) -- self[name] is the handle
local handle
handle = sharedScheduler:scheduleScriptFunc(function()
self:unscheduleGlobal(name)
listener()
end, time, false)
return handle
end
-- Module Charts
-- Dialog视图模板
-----------------------------------------------------
module( "Charts",package.seeall )
setmetatable(Charts,{__index = dialog_t})
---------------------------实例变量--------------------------
local instance = nil
local NUM_PER_PAGE_0 = 10 --初始化时加载的个数
local ITEM_NUM = 28 -- 4 * 7 = 28 区间定为 28 ,同时最多 28 个(待定) ITEM , 初始加载 10 个,然后加至 28 ,保持不变
local ITEM_NUM_4 = 7 -- 分了四部分
local LOAD_INTERVAL = 0.1 -- 加载一个新的item的时间间隔
local MARGIN = 0
local sharedScheduler = cc.Director:getInstance():getScheduler() --cc.Director:getInstance():getScheduler():scheduleScriptFunc
----------------------------实例的创建与销毁-------------------------
function getInstance()
instance = instance or new()
return instance
end
function destroyInstance()
if instance then
instance:dispose()
instance = nil
end
end
-----------------------------------------------------
function new()
local this = {}
setmetatable(this,{__index = Charts})
this:init()
return this
end
------------------------------实例的UI初始化-----------------------
function init(self)
dialog_t.init(self)
self._name = "Charts"
self._layout = Global.getInstance():loadUI("", self._name)
self._core:addChild(self._layout)
self:initRegister()
end
-------------------------------实例UI对象的初始化与绑定----------------------
function controlRegister(self)
-- self.xxxx = Global.getInstance():getUINodeLoopByName(self._layout, "xxxx")
--
-- self.xxxx_list = Global.getInstance():getUINodeLoopByName(self._layout, "xxxx_list")
-- self.xxxx_list:setBounceEnabled(true)
-- self.xxxx_list:setItemsMargin(4.0)
-- self.xxxx_list:setItemModel(Global.getInstance():loadUI("", "xxxx_item"))
--
-- Global.getInstance():UIEventRegister("ended", self._name, self.xxxx, "btnxxxx")
self.lsv_main = Global.getInstance():getUINodeLoopByName(self._layout, "ListView_2")
local itemUI = Global.getInstance():loadUI("", "ChartsCell")
--self.item = Global.getInstance():getUINodeLoopByName(itemUI, "Panel_1")
--self.item:retain()
--self.lsv_main:setItemModel(self.item)
self.inner = self.lsv_main:getInnerContainer()
self.lsv_main:setItemsMargin(MARGIN)
self.btn_1 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9") --三个subType
self.btn_2 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9_0")
self.btn_3 = Global.getInstance():getUINodeLoopByName(self._layout, "Button_9_0_0")
self.btn_back = Global.getInstance():getUINodeLoopByName(self._layout, "Button_4")
Global.getInstance():UIEventRegister("ended", self._name, self.btn_1, "Btn_subType",nil, 1)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_2, "Btn_subType",nil, 2)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_3, "Btn_subType",nil, 3)
Global.getInstance():UIEventRegister("ended", self._name, self.btn_back, "Btn_back")
self.lsv_main:addScrollViewEventListener(ListScrollViewEvent)
local function load0()
self:load_next_items_to_tail_0(1)
end
local function load1()
self:load_next_items_to_head(1)
end
local function load2()
self:load_next_items_to_tail(1)
end
local function onTouchBegan(touch, event)
self.delY = 0
return true
end
local function onTouchMoved(touch, event)
self.delY = touch:getLocation().y - touch:getPreviousLocation().y
if not self.PHASE_0_END then --加载一个item时,弹性消失一瞬间
if self.delY < 0 then
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0', 'NotNil')
end
else
if self.handle0 == nil then
self.handle0 = self:scheduleGlobalWithTime(load0, LOAD_INTERVAL, ITEM_NUM - (self.iTail - self.iHead + 1), 'handle0') -- times <= 0 也会执行一次
end
end
end
end
local function onTouchEnded(touch, event) --加载新item时,弹性消失
if self.PHASE_0_END then
local yInner = self.inner:getPositionY() --lsv_main 和世界坐标系是平移关系
local yHead = self.lsv_main:getItem(0):getPositionY() + yInner
local yTail = self.lsv_main:getItem(self.iTail - self.iHead):getPositionY() + yInner
local yScv = self.lsv_main:getPositionY()
local y = touch:getLocation().y
y = y - yScv -- 比较 yHead - y , y - yTail
if y - yTail < yHead - y then -- 在下部
if self.delY > 0 then --往下走
if self.handle1 ~= nil then --这两个判断顺序不能变,见 self:unschedule
self:unscheduleGlobal('handle1')
end
if self.handle2 == nil then --简单起见可以不考虑加载到头的情形
self.handle2 = self:scheduleGlobalWithTime(load2, LOAD_INTERVAL, ITEM_NUM_4, 'handle2')
end
end
else --在上部
if self.delY < 0 then --往上走
if self.handle2 ~= nil then
self:unscheduleGlobal('handle2')
end
if self.handle1 == nil then
self.handle1 = self:scheduleGlobalWithTime(load1, LOAD_INTERVAL, ITEM_NUM_4, 'handle1')
end
end
end
end
end
self.listener1 = cc.EventListenerTouchOneByOne:create()
self.listener1:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN )
self.listener1:registerScriptHandler(onTouchMoved,cc.Handler.EVENT_TOUCH_MOVED )
self.listener1:registerScriptHandler(onTouchEnded,cc.Handler.EVENT_TOUCH_ENDED )
cc.Director:getInstance():getEventDispatcher():addEventListenerWithFixedPriority(self.listener1, -1)
end
----------------------------消息注册-------------------------
function messageRegister(self)
-- self.listener1 = Global.getInstance():UIMessageRegister("xxxx", self._name)
end
-----------------------------消息清除------------------------
function messageUnRegister(self)
-- Global.getInstance():UIMessageUnRegister(self.listener1)
end
------------------------------消息触发回调-----------------------
function onMessage(self, name, data)
if "xxxx" == name then
elseif "" == name then
end
end
---------------------------通知注册--------------------------
function noticeRegister(self)
-- self.notice = Global.getInstance():UINoticeRegister("xxxx", self._name)
end
----------------------------通知清除-------------------------
function noticeUnRegister(self)
-- Global.getInstance():UINoticeUnRegister(self.notice)
end
-----------------------------通知触发回调------------------------
function onNotice(self, name, data)
if "xxxx" == name then
elseif "" == name then
end
end
-----------------------------初始化------------------------
function initRegister(self)
self:controlRegister()
self:messageRegister()
self:noticeRegister()
end
function releaseRegister( self )
self:messageUnRegister()
self:noticeUnRegister()
end
-----------------------------场景开始载入回调------------------------
function onEnter(self)
print(self._name .. " => " .. "onEnter")
self.subType = 1 --默认
self:set_item_model()
self:Init()
end
------------------------------场景清除回调-----------------------
function onExit(self)
print(self._name .. " => " .. "onExit")
self:doClear()
--self.item:release()
if self.listener1 ~= nil then --有内置的self.listener!
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.listener1)
self.listener1 = nil
end
end
function doClear(self)
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0')
end
if self.handle1 ~= nil then
self:unscheduleGlobal('handle1')
end
if self.handle2 ~= nil then
self:unscheduleGlobal('handle2')
end
if self.handle_can_load ~= nil then --有限次计时器也要释放,否则关闭页面后会出问题(self = nil)
self:unscheduleGlobal('handle_can_load')
end
if self.handle_inner_pos ~= nil then
self:unscheduleGlobal('handle_inner_pos')
end
end
-------------------------------实例销毁----------------------
function dispose(self)
self:releaseRegister()
if self._core then
self._core:removeFromParent(true)
self._core = nil
end
dialog_t.dispose(self)
end
--------------------------------UI刷新---------------------
function refreshUI(self)
end
function refreshData(self)
end
----------------------------响应-------------------------
function btnXXXX(self, sender, param)
end
function Btn_back(self, sender, param)
Dialogs.getInstance():closeDialog(self._name)
end
function Btn_subType(self, sender, param)
self:doClear()
self.subType = param
self:Init()
end
function ListScrollViewEvent(sender, evenType)
local self = getInstance()
local function set_can_load()
self.can_load = true
self.inner:setPosition(self.x_record, self.y_record)
end
-- local function set_inner_pos() -- 分开写在倒着滑时竟然出问题。。。
-- self.inner:setPosition(self.x_record, self.y_record)
-- end
if evenType == ccui.ScrollviewEventType.scrollToBottom then
print("BOTTOM")
if self.iTail ~= #self.data and self.can_load then
self.can_load = false
self.lsv_main:jumpToBottom()
--self.handle_inner_pos = Scheduler.performWithDelayGlobal(set_inner_pos, 0)
self.handle_can_load = Scheduler.performWithDelayGlobal(set_can_load, 0) --require scheduler在main里
self:load_next_items_to_tail(ITEM_NUM_4)
end
elseif evenType == ccui.ScrollviewEventType.scrollToTop then
print("TOP" )
if self.iHead ~= 1 and self.can_load then
self.can_load = false
self.lsv_main:jumpToTop()
self.handle_can_load = Scheduler.performWithDelayGlobal(set_can_load, 0)
self:load_next_items_to_head(ITEM_NUM_4)
end
end
end
----------------------------custom-----------------------------
function Init(self )
self.data ={}
for i = 1, 100 do
self.data[i] = i
end
self.can_load =true
self.iHead = 1
self.iTail = 0
self.PHASE_0_END = false --第0阶段结束后再激活其他handle
self.lsv_main:removeAllItems()
self.lsv_main:jumpToTop()
self:set_item_model()
local function load0()
self:load_next_items_to_tail_0(1)
end
self.handle0 = self:scheduleGlobalWithTime(load0, LOAD_INTERVAL, ITEM_NUM - NUM_PER_PAGE_0,'handle0')
self:load_next_items_to_tail(NUM_PER_PAGE_0)
end
function set_an_item(self, item, i)
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3"):setString(tostring(self.data[i]))
end
function load_next_items_to_head(self, num) --同时从tail删除
local start = self.iHead - 1
local bound = math.max(1, self.iHead - num)
self.iHead = bound
local inner_delY = 0
for i = start, bound, -1 do
self.lsv_main:insertDefaultItem(0)
local item = self.lsv_main:getItem(0)
self:set_an_item(item, i)
if self.iTail - i + 1 > ITEM_NUM then -- 保持总数在 ITEM_NUM 个
self.lsv_main:removeItem(self.iTail - i)
inner_delY = inner_delY + (self.item_height + MARGIN)
self.iTail = self.iTail - 1
end
end
local y = self.inner:getPositionY()
self.inner:setPosition(0, y + inner_delY)
self.x_record, self.y_record = self.inner:getPosition()
print('head ' .. self.iHead .. ' ' .. self.iTail .. ' ' .. self.iTail - self.iHead + 1)
end
function load_next_items_to_tail_0(self, num) -- 这里num只传 1
if self.iTail - self.iHead + 1 == ITEM_NUM or self.iTail - self.iHead + 1 == #self.data then
if self.handle0 ~= nil then
self:unscheduleGlobal('handle0') --需要尽快执行 handle2
end
return
end
local start = self.iTail + 1
local bound = math.min(#self.data, self.iTail + num)
self.iTail = bound
for i = start, bound do
print("tail0 " .. i)
self.lsv_main:pushBackDefaultItem()
local item = self.lsv_main:getItem(i - self.iHead)
self:set_an_item(item, i)
end
end
function load_next_items_to_tail(self, num) --同时从head删除
local start = self.iTail + 1
local bound = math.min(#self.data, self.iTail + num)
self.iTail = bound
local inner_delY = 0
for i = start, bound do
self.lsv_main:pushBackDefaultItem()
local item = self.lsv_main:getItem(i - self.iHead)
inner_delY = inner_delY - (self.item_height + MARGIN)
self:set_an_item(item, i)
if i - self.iHead + 1 > ITEM_NUM then --保持总数在 ITEM_NUM 个
self.lsv_main:removeItem(0)
self.iHead = self.iHead + 1
--inner_delY = inner_delY + (self.item_height + MARGIN)
end
end
local y = self.inner:getPositionY()
self.inner:setPosition(0, y + inner_delY)
self.x_record, self.y_record = self.inner:getPosition()
print('tail ' .. self.iHead .. ' ' .. self.iTail .. ' ' .. self.iTail - self.iHead + 1)
end
function set_item_model(self)
--以下注释方法并不能显示item
-- for i = 1,3 do
-- if self.subType == i then
-- Global.getInstance():getUINodeLoopByName(self.item, "Cell" .. i):setVisible(true)
-- else
-- Global.getInstance():getUINodeLoopByName(self.item, "Cell" .. i):setVisible(false)
-- end
-- end
local itemUI = Global.getInstance():loadUI("", "ChartsCell" .. self.subType)
local item = Global.getInstance():getUINodeLoopByName(itemUI, 'Panel_1')
self.item_width = item:getContentSize().width
self.item_height = item:getContentSize().height
self.lsv_main:setItemModel(item) -- 该函数中把item retain 了,但是一般只有手动 retain()的东西才用手动 release().
end
-----------------------借用scheduler.lua代码并修改-----------------------
function unscheduleGlobal(self, name, p) -- self[name] is the handle
sharedScheduler:unscheduleScriptEntry(self[name])
self[name] = nil
if p == nil then
self.PHASE_0_END = true
end
end
-- 有限次数的倒计时, time = 次数
function scheduleGlobalWithTime(self, listener, interval, times, name) -- times <= 0 也会执行一次 , name is string
local handle
local i = times
handle = sharedScheduler:scheduleScriptFunc(function()
i = i - 1
listener(i)
if(i <= 0)then
self:unscheduleGlobal(name)
end
end, interval, false)
return handle
end
--仅执行一次
function performWithDelayGlobal(self, listener, time, name) -- self[name] is the handle
local handle
handle = sharedScheduler:scheduleScriptFunc(function()
self:unscheduleGlobal(name)
listener()
end, time, false)
return handle
end