Objective c UIScrollView具有数百个数据点的最佳实践

Objective c UIScrollView具有数百个数据点的最佳实践,objective-c,ios,uiview,uiscrollview,Objective C,Ios,Uiview,Uiscrollview,Microsoft Outlook过去有一个滚动时间线视图,可以查看Outlook中发生的所有活动,现在可能仍然有。我想在我的应用程序中重新创建类似的东西 我已经研究了UIScrollView的文档,我知道如何让它以我想要的方式工作。我的问题更倾向于当内容视图可能很大时,以最有效的方式在UIScrollView中显示数百项 我可以: 例如,组合一个较小视图的列表,每个视图表示一天,并使用这些天中的数据项填充这些较小视图,然后将这些聚合视图作为子视图附加到内容视图中 或 我可以简单地用子视图

Microsoft Outlook过去有一个滚动时间线视图,可以查看Outlook中发生的所有活动,现在可能仍然有。我想在我的应用程序中重新创建类似的东西

我已经研究了UIScrollView的文档,我知道如何让它以我想要的方式工作。我的问题更倾向于当内容视图可能很大时,以最有效的方式在UIScrollView中显示数百项

我可以:

  • 例如,组合一个较小视图的列表,每个视图表示一天,并使用这些天中的数据项填充这些较小视图,然后将这些聚合视图作为子视图附加到内容视图中

  • 我可以简单地用子视图填充一个内容视图,其中包含我想在时间线上显示的每个数据项
我想知道的是:

  • 从内存和时间的角度来看,呈现所有这些数据点的最有效方式是什么?每一个都将作为标签或按钮出现在时间线上
  • 哪种方法更自然地支持收缩和缩放
  • 是否最好提前初始化整个内容视图(并且可能会花费大量时间),还是只在“视图窗口”附近初始化视图,然后在用户滚动时添加详细信息

  • 谢谢

    你能确定的唯一方法就是做一点实验。我意识到这不是一个非常有用的答案,但我至少可以给你一些提示:

    使用
    UIScrollView
    s高效地显示多屏内容是出了名的困难。在某些情况下,我已经为此挣扎了好几个星期。在较旧的硬件(iphone3g/2ndgen iPod或更旧的)上情况更糟,但如果你弄错了,你仍然可以轻松地将现代iOS设备拖下水。您通常会遇到两个性能问题:

    • 同时在屏幕上显示多个
      UIView
      s(包括UILabel等)会严重影响性能。如果每个数据点都是一个视图,并且可以缩小以查看所有数据点,则会遇到这种情况
    • 相反,拥有巨大的视图(大于一个屏幕)同样糟糕,因为当任何视图都可见时,整个视图都需要保存在内存中
    你可能会发现这与缩放有多么不相称:你不知道一屏到底有多少

    • 我建议你把一切都设置得很好很简单,从视图开始,不要太担心缩放-确保在最大缩放级别上一切都顺利
    • 然后,添加缩放功能(您需要将所有小视图放在一个容器视图中,该容器视图将被缩放),并查看它在最早支持的硬件上的性能。如果你不允许放大太远,你可能不会有任何改变
    • 如果缩小时它开始发出嘎嘎声,请尝试将内容细分为平铺。您需要尝试这些的大小,但是每个平铺20多个子视图可能是一个好的开始。在滚动视图代理中,通过在用户的
      CALayer
      上将
      shouldRasterize
      属性设置为true,检测用户何时充分缩小并强制平铺光栅化。这实际上应该将平铺的所有子视图预渲染为纹理,因此在渲染屏幕时,它将使用预渲染图像,而不是遍历所有子视图并单独渲染它们。确保用户再次充分放大后再次禁用它。此外,还应避免一次为所有平铺设置它,否则它将结巴,例如,您可以为每个平铺设置单独的随机缩放级别阈值
    如果您在
    应光栅化
    方面遇到问题,您可能需要直接在
    CALayer
    级别工作。如果这些都没有帮助,大锤方法是使用
    CATiledLayer
    ,就像
    MKMapView
    和其他方法一样。这需要您自己处理所有渲染和触摸事件,并且通常还会导致在地图和Safari应用程序中滚动时出现(有点难看)淡入

    其他一些提示:

    • 避免在内存中保存大量不同的图像。这意味着如果可以,可以重新使用少量的
      UIImage
      s。如果每个视图稍有不同,请在drawRect:中按需生成图像,或使用过滤器,而不是将图像预先绘制为
      CGImage
      s,或从文件中加载它们
    • 尽可能避免alpha混合(半透明)
    • 您可以使用性能工具可视化UIKit合成的复杂性。查看WWDC档案中的核心动画和工具对话

    我希望这能帮助你开始。祝你好运

    哇,这是很棒的信息,正是我想要的。非常感谢你的书面答覆。