【问题标题】:Efficient view controller management in iOSiOS 中高效的视图控制器管理
【发布时间】:2017-06-25 03:40:20
【问题描述】:

在 Snapchat 等无缝滑动导航风格应用的时代,视图控制器管理似乎很重要。有些视图可能很胖,有些视图可能会填充大量数据。当构建一个在二维表面上有 5-10 个视图的 iOS 应用程序时(向左滑动查看 X,向下滑动查看 Y,再次向下滑动查看 Z,等等),什么处理这些视图控制器有一些最佳实践吗?我假设人们希望能够对这些视图中的 UI 元素进行某种关键帧动画。

我能看到的合理解决方案是:

  1. 将所有视图控制器添加到 2d 滚动视图并选择性地锁定滚动方向

    • 优点:易于设置,易于为子视图设置关键帧动画(例如,使用 Jazzhands
    • 缺点:需要保持许多视图控制器处于活动状态,可能会很重 资源和启动时间长。
  2. 将视图控制器添加到 2d 滚动视图并选择性地锁定滚动方向,但仅在需要时填充它们

    • 优点:可以缩短启动时间,也可以轻松设置关键帧动画
    • 缺点:我们仍然需要让所有视图控制器保持活动状态
  3. 使用手势驱动的视图控制器演示动画

    • 优点:我们只需要保持当前视图控制器及其根视图控制器处于活动状态
    • 缺点:设置起来比较麻烦。更难基于滚动执行关键帧动画。呈现大视图控制器时可能会增加延迟

【问题讨论】:

    标签: ios objective-c iphone uiviewcontroller uiscrollview


    【解决方案1】:

    正确的方法是使用UINavigationController 并根据需要从导航堆栈中推送和弹出视图控制器。

    您可以通过实现UIViewControllerAnimatedTransitioning 协议来控制视图控制器之间的动画。这样您就可以使用您能想象到的任何类型的动画进行过渡。

    【讨论】:

    • 这就是我所说的选项 3。但是如果你有一个非常重的视图,比如相机视图(比如 snapchat)。这会在来回滚动时增加延迟,不是吗?
    • 呈现视图控制器与推送和弹出导航堆栈之间存在区别。只要您根据需要适当地加载视图控制器,延迟就不会成为问题。
    • 选项 1 和 2 绝对是糟糕的资源管理的糟糕做法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多