为什么写这个


上面这个问题的答案也是我写这篇文章的初衷,在最近给游戏添加一些列表的时候,对比着应用了一下他们两个,在它们两个之间的优劣势之间进行取舍,就有了这个问题的答案。

按照我一个iOS开发而言,他们俩之间交集就是 UITableView是UIScrollView 的子类,也就是说UITableView是在UIScrollView的基础上写的,在平时的应用中 UITableView或者是UICollectionView应用肯定比UIScrollView要多,要强大!

但是在Cocos中,UITableView的性能真的好低!这是我这两天使用它之后唯一的感受!  并且它的优化方案不好找,我找了一会,没找到合适的一个优化方案,这和我们iOS或者Android就不一样了,Android哪怕是性能不高的ListView在经过性能优化之后还是可以的,这个Cocos的UITableView有什么还的优化方案希望大神能指导一下,供大家参考学习一下!

所以,由于UITableView的性能低,在写一些列表的时候不得以使用UIScrollView + View 的方式,直接看可能觉得比较愚蠢,但事实是在使用中滑动的流畅度要比UITableView好,很尴尬!

UITableView你怎么用的


其实要是只是讨论它们的使用的话真的也挺简单的,UITableView 你只需要记得一句话   -- 先注册,在使用  是的就是在说我们平常说的代理方法,不管是返回行列数的,还是设置cell的,或者点击等等等等,都是需要我们先注册这个方法,在使用的,大概我们看看下面的代码:

self._listView = cc.TableView:create(cc.size(, ))
self._listView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL)
self._listView:setPosition(cc.p(,))
self._listView:setDelegate()
self._listView:addTo(csbNode) self._listView:setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN)
self._listView:registerScriptHandler(handler(self,self.cellSizeForTable), cc.TABLECELL_SIZE_FOR_INDEX)
self._listView:registerScriptHandler(handler(self,self.tableCellAtIndex), cc.TABLECELL_SIZE_AT_INDEX)
self._listView:registerScriptHandler(handler(self,self.numberOfCellsInTableView), cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
self._listView:registerScriptHandler(handler(self,self.tableCellTouched), cc.TABLECELL_TOUCHED)

下面是它们这些方法的实现,具体的这些方法都是用来干什么的我们就不详细说了,相信大家都懂!

--cell视图大小
function BankRecordLayer:cellSizeForTable(view, idx)
return width ,height
end --cell视图数目
function BankRecordLayer:numberOfCellsInTableView(view) return count
end --获取cell
function BankRecordLayer:tableCellAtIndex(view, idx) local cell = view:dequeueCell()
return cell
end --点击cell
function BankRecordLayer:tableCellTouched(view, cell) local cell = view:dequeueCell()
return cell
end

UIScrollView你怎么用的


那同样是这个界面我们要使用UIScrollView该怎么实现呢?

其实大致的思路很简单,就是你给你创建的ScrollView上面按照你给的位置一个个的添加View,其实这样也比较简单,重点是我们有几个细节问题需要我们处理好:

function EmailRecordLayer:CreatEmailItem()

    self._emalRecordListCell = {}
local count = #self._emalRecordList
self._listView:setInnerContainerSize(cc.size(735,90*count+10))
for i=1,count do
local itemView = EmailItemLayer:create(self,self._emalRecordList[i])
itemView:setPosition(5,self._listView:getInnerContainerSize().height-90*(i-1)-10)
itemView:addTo(self._listView)
table.insert(self._emalRecordListCell,itemView)
end
end

下面这个方法是一个完成的给ScrollView 上面添加View的方法,应该能注意到我们再给ScrollView添加View的时候,他就是从底部开始添加的,这个我试过改变他们的锚点,但都是无济于事!

这样当我们需要从上往下显示View的时候就只能倒着去设置它的位置了,这是需要注意的第一点!

第二点就是滑动范围的问题,这里有两点的确需要我们注意一下: setContentSize 和 setInnerContainerSize 这两个方法需要我们区分清楚!!这点区分清楚就能设置好滑动范围!

最后还有一点就是点击事件的问题  view要是能点击就会吞噬滑动事件!设置它不吞噬事件之后不就行了!ennnnn 还有一点: 你按住一个View滑动,滑动结束的时候松开View,这个时候就会无意间触发点击事件的!这个怎么处理?

针对上面这个问题,看下面的代码:

    local startY, endY
local btcallback = function(sender, eventType)
if eventType == ccui.TouchEventType.began then
startY = sender:getTouchBeganPosition().y
elseif eventType == ccui.TouchEventType.ended then
endY = sender:getTouchEndPosition().y
if math.abs(startY-endY) < then
self:onButtonClickedEvent(sender,self.img_red,item)
end
end
end
img_bg:setSwallowTouches(false) --不要吞噬事件
img_bg:addTouchEventListener(btcallback)

那选哪个? 


按照我自己的使用的经验!

要是你只是需要一个列表,不需要对列表进行其他的操作,这两个都是比较简单也是比较合适的,只不过TableView的滑动性能有一点底,让你看着滑动的时候会感觉不流畅!

但要是你在列表的列上面有大量的操作的时候,还是建议使用ScrollView + View 比较好一点!为什么这么说呢?

1、TableView有cell的复用问题,这个当然也可以解决,在iOS中也是一样的,这个你得清楚怎么解决

2、滑动起来TableView会更加的卡顿! 我自己的尝试结果是掉针比以前更严重呢!

上面这些内容就是关于这个要谈论的内容!

Cocos2dx-Lua UIScrollView 和 UITableView 对比的更多相关文章

  1. 【cocos2d-x + Lua(1) 绑定Lua并使用tolua++】

    为什么要使用Lua进行游戏开发?转载请注明出处http://www.cnblogs.com/zisou/p/cocos2dx-lua1.html 上面一个问题我觉得在我们使用Lua之前需要深入思考的, ...

  2. Cocos2dx+lua合适还是Cocos2dx+js合适?

    问题: 开发cocos2dx手游Cocos2dx+lua合适还是Cocos2dx+js合适 百牛信息技术bainiu.ltd整理发布于博客园 回答: 作者:廖宇雷链接:https://www.zhih ...

  3. 开源基于lua gc管理c++对象的cocos2dx lua绑定方案

    cocos2dx目前lua对应的c++对象的生命周期管理,是基于c++析构函数的,也就是生命周期可能存在不一致,比如c++对象已经释放,而lua对象还存在,如果这时候再使用,会有宕机的风险,为此我开发 ...

  4. cocos2d-x lua绑定解析

    花了几天时间看了下cocos2d-x lua绑定那块,总算是基本搞明白了,下面分三部分解析lua绑定: 一.lua绑定主要用到的底层函数 lua绑定其本质就是有一个公用的lua_Stack来进行C和L ...

  5. cocos2d-x + Lua接入iOS原生SDK的实现方案[转]

    相信很多朋友在使用cocos2d-x+lua开发游戏时都遇到过接入iOS原生SDK的问题,比如常见的接应用内支付SDK,广告SDK或是一些社交平台SDK等等,我也没少接过这类SDK.这篇文章主要是对我 ...

  6. Cocos2dx lua 3D实例代码

    用cocoside 创建一个项目 cocos2dx lua 项目即可 ,然后替换掉gamescene 就可以,具体效果还有函数的参数,相信大家一看就明白.简单说下ide 创建的 cocos lua 项 ...

  7. cocos2dx lua 绑定之二:手动绑定自定义类中的函数

    cococs2dx 3.13.1 + vs2013 + win10 1.首先按照<cocos2dx lua 绑定之一:自动绑定自定义类>绑定Student类 2.在Student类中增加一 ...

  8. RichLabel基于Cocos2dx+Lua v3.x

    RichLabel 简介 RichLabel基于Cocos2dx+Lua v3.x解析字符串方面使用了labelparser,它可以将一定格式的字符串,转换为lua中的表结构扩展标签极其简单,只需添加 ...

  9. cocos2d-x lua table数据存储

    cocos2d-x lua table数据存储 version: cocos2d-x 3.6 1. 将table转为json http://blog.csdn.net/songcf_faith/art ...

随机推荐

  1. dnsmasq-2.48没有ipset特性,安装dnsmasq-2.71来支持ipset

    iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储在ipset中,所以使用dnsmasq+ipset就可以实现ip ...

  2. 雅礼集训 Day3 T3 w 解题报告

    w 题目背景 \(\frac 14\)遇到了一道水题,双完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607^2\)眼就切掉了这题,嘲讽了\(\frac 14 ...

  3. 压缩跟踪Compressive Tracking

    好了,学习了解了稀疏感知的理论知识后,终于可以来学习<Real-Time Compressive Tracking>这个paper介绍的感知跟踪算法了.自己英文水平有限,理解难免出错,还望 ...

  4. Astah画时序图

    Astah画时序图,666 1.生命线 时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间, 一般用来描述 系统 :如 客户端,代理层,缓存层,服务器层1.....服务器层N,数据库等. ...

  5. VC++中编译C出错:error C2143: syntax error : missing ';' before 'type'

    转摘自:http://preceo.blog.51cto.com/6225017/1130931 近来写程序时发现了一个问题,用 VC 编译 C语言是 总是提示一个错误:error C2143: sy ...

  6. iOS 后台运行执行代码(例如定位)

  7. vivo面试学习3(git和svn的区别)

    git和svn有什么区别? svn: 系统特点: 1).集中式版本控制系统(存在一个中央版本库,所有开发人员所使用的代码都是来源于版本库,提交代码也是这个中央版本库) 2).企业内部并行集中开发 3) ...

  8. 【BZOJ2301】【HAOI2011】Problem b [莫比乌斯反演]

    Problem b Time Limit: 50 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 对于给出的n个询问,每次 ...

  9. 12.22笔记(关于CALayer//Attributes//CALayer绘制图层//CALayer代理绘图//CALayer动画属性//CALayer自定义子图层//绘图pdf文件//绘图渐变效果)

    12.22笔记 pdf下载文件:https://www.evernote.com/shard/s227/sh/f81ba498-41aa-443b-81c1-9b569fcc34c5/f033b89a ...

  10. 【洛谷 P1364】医院设置(树的重心)

    树的重心的定义: 树若以某点为根,使得该树最大子树的结点数最小,那么这个点则为该树的重心,一棵树可能有多个重心. 树的重心的性质: 1.树上所有的点到树的重心的距离之和是最短的,如果有多个重心,那么总 ...