V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
skyline75489
V2EX  ›  问与答

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

  •  
  •   skyline75489 · 2014-08-08 20:04:00 +08:00 · 3281 次点击
    这是一个创建于 3555 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在UIScrollView里用addSubview一次性add大概一二百个UILabel,能感到明显的卡顿,而且滚动ScrollView还很容易崩溃。如何进行优化?
    12 条回复    2014-08-09 11:16:41 +08:00
    Zhang
        1
    Zhang  
       2014-08-08 20:06:15 +08:00
    OMG!正确的做法是用CoreText将文字绘制上去。CoreText是c语言库,所以很轻量级。
    skyline75489
        2
    skyline75489  
    OP
       2014-08-08 20:10:11 +08:00
    @Zhang CoreText可以自定义背景颜色,边框颜色之类的吗?
    Cwind
        3
    Cwind  
       2014-08-08 20:11:00 +08:00   ❤️ 1
    不要一次性加啊,想想UITableView是如何干的?
    Zhang
        4
    Zhang  
       2014-08-08 20:11:13 +08:00   ❤️ 1
    @skyline75489 很多杂志应用都是CoreText搞的,你不用怀疑的。
    skyline75489
        5
    skyline75489  
    OP
       2014-08-08 20:13:00 +08:00
    @Cwind 用Lazy Load的方式?
    Cwind
        6
    Cwind  
       2014-08-08 20:17:38 +08:00
    @skyline75489 快要用到了再加载啊,你用UIScrollView展示图片的时候总不会也是一次性全部加载完毕吧?
    skyline75489
        7
    skyline75489  
    OP
       2014-08-08 20:23:38 +08:00
    @Cwind 刚开始的时候写烂了,现在才想到优化性能,后悔啊
    lenzhang
        8
    lenzhang  
       2014-08-08 21:41:42 +08:00
    用coretext没错的,改起来也容易
    hoogle
        9
    hoogle  
       2014-08-09 01:52:15 +08:00 via iPhone
    TTTAttributedLabel 现成的。。
    skyline75489
        10
    skyline75489  
    OP
       2014-08-09 08:39:13 +08:00
    @hoogle 这个效率高吗?我是要做一个类似输入法候选框的东西,一打开出来一堆候选词,还要响应点击的事件,所以刚开始很自然地想到用UILabel来做,结果发现效率不行...
    hoogle
        11
    hoogle  
       2014-08-09 11:08:38 +08:00
    @skyline75489 这样的话, 考虑用UITableView + Button合适。 每个tableViewCell放一定数量的button, 滚动到屏幕上才会加载, 肯定不会卡。 CoreText更多的是针对富文本。。 也能实现但是相对没有button好控制
    hoogle
        12
    hoogle  
       2014-08-09 11:16:41 +08:00 via iPhone   ❤️ 1
    @skyline75489 之前写的一个效果:
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   975 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 18:19 · PVG 02:19 · LAX 11:19 · JFK 14:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.