聊天系统
一般要处理:聊天窗口的频繁信息刷新显示,黑名单屏蔽,私聊,语音信息处理等。
为了优化界面的显示性能,需要将界面里面的每一条信息item进行复用,从而减少聊天界面创建出来的item数量。
会用到一个简单的池ChatItemMgr
当界面滑动时,会触发scrollView位置改变,根据位置事件监听,界面调用getChatItem()方法
function ChatShowView:getChatItem(lastItemIndex, isUp, chatVo)
local itemIndex
if isUp then
itemIndex = lastItemIndex - 1
else
itemIndex = lastItemIndex + 1
end
itemIndex = itemIndex>self.maxChatItemNum and 1 or itemIndex
itemIndex = itemIndex<1 and self.maxChatItemNum or itemIndex
local item = ChatItemMgr.GetChatItem({
itemIdx = itemIndex, -- 第几个
tabIdx = self.nowChannelType, -- 频道类型
chatVo = chatVo, -- 聊天信息
pObj = self.chatScroll.gameObject, -- 滑动界面
pItem = self.pItem[self.nowChannelType], -- 显示的聊天样式
pIns = self,
})
item:setActive(true)
return item, itemIndex
end
在ChatItemMgr里面进行item的创建和管理
function ChatItemMgr.GetChatItem(params)
local params = params or {}
local mgrIns = ChatItemMgr.getInstance()
local key = mgrIns:getKey(params.tabIdx, params.chatVo)
return mgrIns:getItemIns(key, params)
end
function ChatItemMgr.getItemIns(key, params)
local items = self:getItems(key)
local itemIdx = params.itemIdx
local item = items[itemIdx]
if not item then
item = self:getItemCls(key)
items[itemIdx] = item
local cls = self:getItemCls(key)
item = cls.New(params.pIns, NGUITools.AddChild(params.pObj, params.pItem))
items[itemIdx] = item
end
return item
end