【问题标题】:Why aren't the main views aligned for the view controllers in a custom cross-dissolve segue?为什么在自定义交叉溶解 segue 中主视图没有与视图控制器对齐?
【发布时间】:2019-09-03 18:15:03
【问题描述】:

我编写了一个自定义 UIStoryboardSegue 子类来创建两个 UIViewController 之间的淡出/淡入、交叉溶解过渡。

视图控制器的主视图具有位于每个视图中心的按钮(标记为“视图控制器 1”和“视图控制器 2”,因此我假设当我交叉溶解一个到另一个时 - 将它们都设置为相同超级视图的子视图并使它们的框架相同——按钮也会对齐。

class SwapSegue: UIStoryboardSegue {

    override func perform() {
        fade()
    }

    func fade() {
        destination.view.alpha = 0

        source.view.superview?.addSubview(destination.view)
        destination.view.frame = source.view.frame

        UIView.animate(withDuration: 1, delay: 0, options: .curveEaseInOut, animations: {
            self.destination.view.alpha = 1
        }, completion: { success in
            if var controllerStack = self.source.navigationController?.viewControllers {
                controllerStack[controllerStack.firstIndex(of: self.source)!] = self.destination
                self.source.navigationController?.setViewControllers(controllerStack, animated: false)
            } else {
                self.source.present(self.destination, animated: false, completion: nil)
            }
        })

    }
}

这几乎可以工作,但它在过渡期间无法正确定位目标视图,因此当 segue 的动画完成时,最后会出现“pop”。对齐似乎偏离了导航栏的大致高度,所以我怀疑这是一个线索。

(注意:在这个循环的 GIF 中,您可以看到“View Controller 1”上的按钮按下,动画交叉淡入淡出,按钮未对齐,然后在动画完成和目标视图结束时出现“pop”控制器终于被正确放置了。)

我如何正确定位它,使其按原样对齐并且动画流畅?

【问题讨论】:

  • 在视图控制器的属性检查器中显示您的设置。它们彼此不同。而且你使用两种不同的方式来呈现视图控制器,因此你得到了不同的动画和位置。
  • 两个视图控制器的属性与检查器中显示的相同。事实上,它们是相同的,因为我复制了第一个控制器,只是将按钮的标题更改为“View Controller 2”。
  • 我真的很想对你的问题投反对票,因为我很生气。但也许相反,我对您问题的批评可能会帮助您。究竟如何“对齐视图控制器”?你对齐视图,而不是控制器,对吧?所以也许你已经开始回答你自己的问题了? (请不要试图反对,只是指出一些可能对你有帮助的东西。祝你好运!)
  • 是的,准确地说,我希望对齐两个视图控制器的主视图。如果我这样做,这些视图中的按钮将明显对齐。我认为这很明显,因为我在代码中设置了一个视图的框架与另一个视图的框架等效,但我会更新这个问题,这样它就很清楚了。关于答案的任何想法?
  • 你是如何定位你的按钮的?自动布局?有什么限制?

标签: ios swift uiviewcontroller uinavigationcontroller uistoryboardsegue


【解决方案1】:

我找到了解决方案。我不是 100% 确定为什么会这样,所以如果你能解释它,请在下面的 cmets 中解释。

最初我通过自动布局将两个按钮置于视图控制器的主视图中。

通过向每个视图控制器的主视图添加一个子视图(我们称之为“内容视图”),固定到其边缘,并将每个按钮置于 那个 视图的中心,现在转换可以按预期工作.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2012-07-28
    • 2021-02-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多