无法从“UIStackView”中删除轴动画

时间:2017-04-02 07:11:18

标签: swift animation uistackview

我在界面构建器中有UIStackView版本,当它的超级视图从纵向旋转到横向时,会将axis属性从vertical更改为horizontal。问题在于,这导致它的两个排列的子视图的动画,其中一个视图在转换到新位置时与另一个视图重叠。

在我的情况下,我想只删除那个特定的动画并立即将视图强制移动到最终位置。

我试图从我的VC中的stackview层删除所有动画:

public override func willTransition(to newCollection: UITraitCollection,
                                    with coordinator: UIViewControllerTransitionCoordinator) {

    coordinator.animate(alongsideTransition: {
        _ in
        // The first subview is `UIStackView`           
        self.view.subviews[0].layer.removeAllAnimations()
    })

    super.willTransition(to: newCollection, with: coordinator)
}

我在更改axis属性时观察到动画键,因为这似乎发生在转换过程中的某处(由界面构建器自动设置)。不幸的是,我没有运气,因为图层在stackview及其子视图/ arrangementsSubviews上返回nil animationKeys

class StackView : UIStackView {

    override var axis: UILayoutConstraintAxis {

        didSet { /* here */ }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为这将具有挑战性。有一个很好的演示,如果它显示的轴动画是你想要摆脱的,你可以尝试做over here的声音,非常确定它在UIStackView设计空间之外。

非常确定“立即将视图强制移动到最终位置”的最佳解决方案实际上是每个轴都有一个UIStackView,并在旋转时在它们之间移动内容。

您还可以尝试在完成时调用performWithoutAnimation的{​​{1}}中添加viewWillTransition(to:with:)块?也许这会奏效。我会采用双视图而不是那个!