【问题标题】:Laggy ViewController even when not processing data即使不处理数据,ViewController 也会滞后
【发布时间】:2015-04-20 18:48:44
【问题描述】:

我有一个UIViewController,它预先进行大量数据处理以呈现UIScrollView。奇怪的是,即使所有的处理/渲染都完成了,UIScrollView 在滚动时还是很迟钝。

我已经仔细检查过没有任何东西正在处理,我什至没有使用 scrollViewDidScroll 委托方法。

我在视图中也有一个UITableView(目前没有数据),它也是滞后的,因此它会影响该视图中的所有内容。 (如果我更改选项卡,其他视图都不会显示任何滞后)。

高内存使用率会导致这种延迟吗?考虑到我在处理后删除了大部分加载的数据,这似乎很奇怪。还能是什么?

编辑:澄清一下,我的UITableView 目前是空的,所以这不是回收问题。我刚刚提到了UITableView,因为落后的不仅仅是UIScrollView

编辑 2: 正如@MacKentoch 指出的那样,使用舍入会导致滞后。我从我的子视图中删除了舍入,它解决了这个问题。我正在使用它来将正方形四舍五入:

label.layer.cornerRadius = height / 2
label.layer.masksToBounds = true

有没有更有效的方法来做到这一点?

【问题讨论】:

  • 在所有模拟器上都滞后吗?它恰好与 iPhone 6 plus 模拟器滞后(因为缩小,否则会占用我所有的屏幕)
  • 哦,它在模拟器上实际上并不是超级滞后。它在实际设备上更加滞后。在这一点上,我已经从 6+ 模拟器开始期待它了哈哈。
  • 您能否运行 Time Profiler 工具并发布前 5 个条目的屏幕截图/代码?
  • 好的。 我不确定是不是同样的情况。但是,滚动时我在 TableView 上遇到了同样的问题。事实上,我对多个子视图层阴影,圆角...)产生了一些影响。我删除了阴影效果,然后它就更好了。我想在滚动时渲染阴影效果可能会花费太多。否则您是否检查您的内存使用情况
  • 没有代码有点难,你确定你也在回收cell中的对象吗?

标签: ios swift uiviewcontroller uiscrollview


【解决方案1】:

感谢@MacKentoch 建议它可能是圆角。在确定这是问题后,这个 SO 答案很快解决了问题:

UILabel layer cornerRadius negatively impacting performance

【讨论】:

    【解决方案2】:

    阴影效果影响滚动渲染(被阴影的子视图越多,效果越差)。

    关于圆角,它也可能会产生影响(但我认为影响较小)。

    解决办法:

    • shadow :从图像或放置子视图来制作类似阴影的效果

    • 圆角图片

    我就是这样做的,不能像我想要的那样做有点失败,但结果还可以。

    【讨论】:

    • 只是对未来的提醒,你可以在没有masksToBounds 的情况下做圆角,这是真正的罪魁祸首。查看我的答案中的链接,您可以在没有图像的情况下完成。
    猜你喜欢
    • 2011-07-09
    • 2017-11-13
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多