【问题标题】:How to swap two views frame and also swap them in their view hierarchy in swift?如何交换两个视图框架并在它们的视图层次结构中快速交换它们?
【发布时间】:2020-02-25 08:34:23
【问题描述】:

我有两个视图,比如 view1 和 view2 添加到一个超级视图。 View1 在前面,并且比后面的 view2 有更大的框架,view2 的顶部在 view1 上方可见,使其看起来像一副纸牌。当用户水平滑动 view1 时,它应该在 view2 后面,而 view2 应该在前面。我不知道如何实现这一点,我需要在一个动画中交换两个视图位置并在视图层次结构中交换它们。任何帮助将不胜感激。

【问题讨论】:

    标签: swift animation


    【解决方案1】:

    试试这个:

    if
        let firstIndex = view.subviews.firstIndex(of: firstView),
        let secondIndex = view.subviews.firstIndex(of: secondView)
    {
        let firstViewFrame = firstView.frame
        UIView.animate(withDuration: 1, animations: {
            self.firstView.frame = self.secondView.frame
            self.secondView.frame = firstViewFrame
            self.view.exchangeSubview(at: firstIndex, withSubviewAt: secondIndex)
        })
    }
    

    示例:https://drive.google.com/open?id=1jAUokRRuUNtFmmtI1sBVh_eMpf3gUylV

    【讨论】:

    • 嘿@hell0friend,我试过了,但这并没有改变视图框架,它只是让 firstview 落后于 secondView 并带有一个奇怪的动画,也许我使用约束设置视图是原因这不起作用。
    • 我找到了一个解决方案,我从超级视图中删除了两个视图,并根据所需的层次结构和约束添加它们,这就像一个魅力,但它是一堆代码。跨度>
    • 如果你使用约束没有其他办法,但是你可以使用exchangeSubview函数来代替删除两个视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多