scv.lua 的使用
来源:互联网 发布:怎么避免mac涂层脱落 编辑:程序博客网 时间:2024/06/14 06:13
---------------------------------------------------------------------------------------------------------
----通用cocos lua scroll list view 框架 (version 01) scv.lua 的说明文档
---------------------------------------------------------------------------------------------------------
感谢我司(北京昊睿中天)成员 柯友运 给我的灵感,写出该库。 外界来的灵感更多也非常重要!
现在 scv.lua 经过我测试已经可以用了
使用方法:
以排行榜“Charts.lua”为例,Charts是个页面,里面有3个标签页
1. 只能用 ScrollView 。 listView 即是单列的 ScrollView
2. item 要求: item是可以用 :clone()克隆的东西,layout ,_layerRGBA 不能克隆, 美术上应该有个能得出 item大小的image,以这个image为总根即可, 获得item后 retain() 一下,离开Charts页面时 release()
3.在 Charts.lua 有个 create() 方法:
function create(self)
scroll:set_margin(0,0,0)
scroll:create('Charts', self.scv, self['item' .. self.subType], self.data)
end
每次打开一个标签页就调用一次
4. 在模块中要有个 set_an_item(self, item, i)函数装饰一个item, item对应数据第i项,数据应该能用 # 符号获取长度
5. 在Charts 的 onExit() 中调用scroll.onExit()并将item release
scroll:onExit()
for i = 1, 3 do
self['item' .. i]:release()
self['item' .. i] = nil
end
现在 scv.lua 有如下功能:
1. scroll:jump_to(i) 跳至第i行,会得到最佳效果
2. scroll:register_item_touch() ,scroll:unregister_item_touch() 注册和取消item的点击事件,
这个是用范围做的,前提是:相关缩放为 100%, scroll view 的父源点和世界源点重合,在模块中要有个 touch_an_item(self, item, i)方法,item对应数据第i项,仅手指抬起后相应,该方法局限太强,可不用
3.如果数据有变化,刷新调用 self.refresh() 会得到最佳效果.
4.如果希望再次回到某一标签A页面还能到达之前的状态, 可以在模块内建个 local state, 在离开标签A时存储当前的状态 state = scroll:get_current_state() , 无论在游戏的任何时候再回到改标签(即使该标签页中的items个数有变化) 在调用该模块的 self:create 后,接着调用 scroll:set_current_state(state), 那么会得到一个最佳效果
使用方法:
以排行榜“Charts.lua”为例,Charts是个页面,里面有3个标签页
1. 只能用 ScrollView 。 listView 即是单列的 ScrollView
2. item 要求: item是可以用 :clone()克隆的东西,layout ,_layerRGBA 不能克隆, 美术上应该有个能得出 item大小的image,以这个image为总根即可, 获得item后 retain() 一下,离开Charts页面时 release()
3.在 Charts.lua 有个 create() 方法:
function create(self)
scroll:set_margin(0,0,0)
scroll:create('Charts', self.scv, self['item' .. self.subType], self.data)
end
每次打开一个标签页就调用一次
4. 在模块中要有个 set_an_item(self, item, i)函数装饰一个item, item对应数据第i项,数据应该能用 # 符号获取长度
5. 在Charts 的 onExit() 中调用scroll.onExit()并将item release
scroll:onExit()
for i = 1, 3 do
self['item' .. i]:release()
self['item' .. i] = nil
end
现在 scv.lua 有如下功能:
1. scroll:jump_to(i) 跳至第i行,会得到最佳效果
2. scroll:register_item_touch() ,scroll:unregister_item_touch() 注册和取消item的点击事件,
这个是用范围做的,前提是:相关缩放为 100%, scroll view 的父源点和世界源点重合,在模块中要有个 touch_an_item(self, item, i)方法,item对应数据第i项,仅手指抬起后相应,该方法局限太强,可不用
3.如果数据有变化,刷新调用 self.refresh() 会得到最佳效果.
4.如果希望再次回到某一标签A页面还能到达之前的状态, 可以在模块内建个 local state, 在离开标签A时存储当前的状态 state = scroll:get_current_state() , 无论在游戏的任何时候再回到改标签(即使该标签页中的items个数有变化) 在调用该模块的 self:create 后,接着调用 scroll:set_current_state(state), 那么会得到一个最佳效果
Charts.lua 为例 :
-----------------------------------------------------
-- Module Charts
-- Dialog视图模板
-----------------------------------------------------
module( "Charts",package.seeall )
setmetatable(Charts,{__index = dialog_t})
---------------------------实例变量--------------------------
local instance = nil
----------------------------实例的创建与销毁-------------------------
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.scv = Global.getInstance():getUINodeLoopByName(self._layout, "ScrollView_1")
local itemUI = Global.getInstance():loadUI("", "ChartsCell")
-- local itemUI_2 = Global.getInstance():loadUI("", "ChartsCell2")
-- local itemUI_3 = Global.getInstance():loadUI("", "ChartsCell3")
self.item1 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5")
self.item2 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5_1")
self.item3 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5_2")
self.item1:retain()
self.item2:retain()
self.item3:retain()
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")
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.data = {}
for i = 1, 100 do
self.data[i] = i
end
self.subType = 1
self:create()
end
------------------------------场景清除回调-----------------------
function onExit(self)
print(self._name .. " => " .. "onExit")
scroll:onExit()
for i = 1, 3 do
self['item' .. i]:release()
self['item' .. i] = nil
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 create(self)
scroll:set_margin(0,0,0) -- set_margin()也有默认值,如果不用此函数则为上次的margin值
scroll:create('Charts', self.scv, self['item' .. self.subType], self.data) -- 后面还有两个参数,不写则用默认值
end
function set_an_item(self, item, i)
if self.subType == 2 then
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3_0"):setString(tostring(self.data[i]))
else
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3"):setString(tostring(self.data[i]))
end
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.subType = param
self:create()
end
-- Module Charts
-- Dialog视图模板
-----------------------------------------------------
module( "Charts",package.seeall )
setmetatable(Charts,{__index = dialog_t})
---------------------------实例变量--------------------------
local instance = nil
----------------------------实例的创建与销毁-------------------------
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.scv = Global.getInstance():getUINodeLoopByName(self._layout, "ScrollView_1")
local itemUI = Global.getInstance():loadUI("", "ChartsCell")
-- local itemUI_2 = Global.getInstance():loadUI("", "ChartsCell2")
-- local itemUI_3 = Global.getInstance():loadUI("", "ChartsCell3")
self.item1 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5")
self.item2 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5_1")
self.item3 = Global.getInstance():getUINodeLoopByName(itemUI, "Image_5_2")
self.item1:retain()
self.item2:retain()
self.item3:retain()
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")
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.data = {}
for i = 1, 100 do
self.data[i] = i
end
self.subType = 1
self:create()
end
------------------------------场景清除回调-----------------------
function onExit(self)
print(self._name .. " => " .. "onExit")
scroll:onExit()
for i = 1, 3 do
self['item' .. i]:release()
self['item' .. i] = nil
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 create(self)
scroll:set_margin(0,0,0) -- set_margin()也有默认值,如果不用此函数则为上次的margin值
scroll:create('Charts', self.scv, self['item' .. self.subType], self.data) -- 后面还有两个参数,不写则用默认值
end
function set_an_item(self, item, i)
if self.subType == 2 then
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3_0"):setString(tostring(self.data[i]))
else
Global.getInstance():getUINodeLoopByName(item, "BitmapFontLabel_3"):setString(tostring(self.data[i]))
end
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.subType = param
self:create()
end
0 0
- scv.lua 的使用
- scv.lua [Old]
- scv.lua (可能还需完善)
- 你不了解的SCV技术难点
- linux scv
- Lua 脚本的使用
- LUA脚本的使用
- lua table的使用
- LUA--string的使用
- Lua的require使用
- 【Lua】require 的使用
- Lua的require使用
- lua 的简单使用
- lua ~=的使用
- lua ...的使用
- Lua 字符串的使用
- 【Lua】Lua转义符的使用
- 【Lua学习笔记】Lua中协程的使用
- 定时任务完成日志切割
- js-refferrer无法显示前个页面的地址的解决方法
- 正确理解MySQL中列索引和多列索引
- 大杀器-RoboBinding
- Java-----11、JDBC编程
- scv.lua 的使用
- echart使用例子
- 测试题--by 罗雨屏
- Android-LinearGradient实现TextView字体渐变的效果
- windows 路由表
- 设计模式读书笔记-----访问者模式
- hibernate+spring架构有感
- 取剪贴板内容
- 数据结构整理_有序顺序表合并