【问题标题】:Animation within arranged subview in uistackview "jumps"uistackview“跳跃”中排列的子视图内的动画
【发布时间】:2019-05-01 13:01:44
【问题描述】:

我有一个水平的 UIStackView 包含几个排列的子视图。

我想在用户单击按钮时删除一个排列好的子视图(我们称之为 A),但在此之前我想做一个快速动画。我想做自己的动画,所以我不能只为 stackView.removeArrangedSubview 制作动画,它会做一个默认的基本动画,而不是我想要的特殊动画。

在 A 中,我有另一个使用自动布局的 centeredX 和 centeredY 视图(我们称之为 B)。

当我将 ArrangeSubview A 的 A.widthAnchor.constant 设置为 0 时,其他 arrangedsubviews 逐渐取代它,孩子 B 在动画其 CenterX 之前丢失并向左移动。或者也许它不会丢失centerX,但它在一个小A(宽度= 0,从左侧开始)上的centeredX,但A不应该立即将其宽度变为0,而是在动画完成之后...... .

我尽我所能解释清楚,但我知道这可能会造成混淆。这是显示问题的视频。在动画开始之前,位于arrangedsubview A(占据所有屏幕)中的图像(B)在左侧“跳跃”。

https://drive.google.com/open?id=1nTDRe5zirbuQi86WVBTuU-iDU8aq0lcw

这是我制作这个动画的非常简单的代码:

   UIView.animate(withDuration:4,delay:0, options:.curveEaseInOut, animations : {

        self.c.constant = 0 // c is A.widthAnchor constraint
        self.stackView.layoutIfNeeded()

    },completion: { _ in
        // done
    })

【问题讨论】:

  • 试试这样 self.c.constant = 0 UIView.animate(withDuration:0.3,delay:0, options:.curveEaseInOut, animations : { self.stackView.layoutIfNeeded() },completion: { _ in // 完成 })
  • 已经做了,但不起作用:/

标签: ios swift animation uistackview


【解决方案1】:

我发现自己: 实际上,问题是当我这样做时

Stackview.layoutIfNeeded()

stackview 中的内容可以设置动画,但 stackview 本身不能。所以stackview在动画开始之前更新了它的宽度。 我刚改成

superviewThatContainTheStackView.layoutIfNeeded()

所以现在一切正常:)

【讨论】:

    猜你喜欢
    • 2016-05-23
    • 2018-04-23
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多