UIView 中一次性进行大量的 addSubView 操作,如何提升性能?

2014-08-08 20:04:00 +08:00
 skyline75489
在UIScrollView里用addSubview一次性add大概一二百个UILabel,能感到明显的卡顿,而且滚动ScrollView还很容易崩溃。如何进行优化?
3392 次点击
所在节点    问与答
12 条回复
Zhang
2014-08-08 20:06:15 +08:00
OMG!正确的做法是用CoreText将文字绘制上去。CoreText是c语言库,所以很轻量级。
skyline75489
2014-08-08 20:10:11 +08:00
@Zhang CoreText可以自定义背景颜色,边框颜色之类的吗?
Cwind
2014-08-08 20:11:00 +08:00
不要一次性加啊,想想UITableView是如何干的?
Zhang
2014-08-08 20:11:13 +08:00
@skyline75489 很多杂志应用都是CoreText搞的,你不用怀疑的。
skyline75489
2014-08-08 20:13:00 +08:00
@Cwind 用Lazy Load的方式?
Cwind
2014-08-08 20:17:38 +08:00
@skyline75489 快要用到了再加载啊,你用UIScrollView展示图片的时候总不会也是一次性全部加载完毕吧?
skyline75489
2014-08-08 20:23:38 +08:00
@Cwind 刚开始的时候写烂了,现在才想到优化性能,后悔啊
lenzhang
2014-08-08 21:41:42 +08:00
用coretext没错的,改起来也容易
hoogle
2014-08-09 01:52:15 +08:00
TTTAttributedLabel 现成的。。
skyline75489
2014-08-09 08:39:13 +08:00
@hoogle 这个效率高吗?我是要做一个类似输入法候选框的东西,一打开出来一堆候选词,还要响应点击的事件,所以刚开始很自然地想到用UILabel来做,结果发现效率不行...
hoogle
2014-08-09 11:08:38 +08:00
@skyline75489 这样的话, 考虑用UITableView + Button合适。 每个tableViewCell放一定数量的button, 滚动到屏幕上才会加载, 肯定不会卡。 CoreText更多的是针对富文本。。 也能实现但是相对没有button好控制
hoogle
2014-08-09 11:16:41 +08:00
@skyline75489 之前写的一个效果:

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/126839

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX