【问题标题】:What's the need for UIPresentationController beside helping with trait collection in iOS?除了帮助 iOS 中的特征收集之外,还需要 UIPresentationController 吗?
【发布时间】:2016-06-27 09:47:01
【问题描述】:

UIPresentationController 与仅使用添加子视图并为要呈现的视图设置动画相比有什么好处?它必须遵守的所有协议似乎有点麻烦,许多人仍然喜欢用简单的帧动画来呈现他们的视图。 Apple 引入课程的逻辑是什么?

【问题讨论】:

    标签: swift uipresentationcontroller


    【解决方案1】:

    早在 UIPresentationController 被引入之前,Presentation 机制就已经是 UIKit 的一部分。 UIPresentationController 提供了更大的灵活性,并允许创建除内置演示之外的自定义演示(全屏、当前上下文、弹出框等)。表示机制和 UIPresentationController 存在的原因有很多:

    • 管理视图层次结构。每当您想要呈现视图时,您并不总是拥有呈现视图控制器。通常不鼓励干扰您不拥有的视图控制器的子层次结构,但在演示的情况下,您需要将 presented 视图控制器的视图添加为 呈现视图控制器的视图(或其父视图)。当涉及上下文表示链时(例如弹出框->当前上下文->共享表),它变得更加复杂。当使用表示机制时,UIKit 以一致的方式处理视图层次结构管理。它还为 UIPresentationController 类建立了一个容器视图,让它只专注于管理参与演示的视图。 UIPresentationController 类可以选择向容器视图添加任意装饰和阴影视图,并在containerViewWillLayoutSubviews 方法中响应布局变化。
    • 管理方式。视图控制器以非常特定的顺序呈现和关闭,呈现控制器 API 强制执行此操作。演示机制还确保为被演示遮蔽的视图禁用交互。
    • 维护视图控制器层次结构。表示控制器可以被视为一种更具体的视图控制器包含类型,它们确保呈现的视图控制器仍然是视图控制器层次结构的一部分。这对于 trait 集合传播、外观回调、发送 viewWillTransitionToSize:withTransitionCoordinator:、执行视图控制器转换(包括嵌套表示)等等都是必需的。
    • 管理第一响应者。当演示发生时,当前的第一响应者被隐藏起来,然后在解雇后恢复。

    【讨论】:

    • 感谢@egdmitry,我投了赞成票,但您的解释仍然与 UIPresentationController 上的 Apple Doc 一样密集。所以我还是很困惑。如果你有时间的话,一个更实际的使用类而不是帧动画的比较可能会有所帮助。
    • 使用类是指继承 UIPresentationController 还是使用一般的演示控制器机制?我是否正确理解您的问题的本质是为什么通常应该使用演示机器而不是直接帧操作?
    • 是的,egdmitry!我的意思是一般应该使用演示机器,而不是直接帧操作。我发现 uipresentation 机器很麻烦,因为在许多情况下动画你的框架就可以完成这项工作。所以我试图理解那些你不能做或者uipresentation更好的情况。
    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2011-11-11
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 1970-01-01
    相关资源
    最近更新 更多