无法在动画块中限制子视图的动画

Trouble restraining subview's animation within an animation block

为什么要限制子视图的动画效果?为什么不简单地在动画之后进行布局更改呢?

考虑到我的视图层次结构和这个特定用例,这是合乎逻辑但不可行的。

我的视图层次结构:

MyViewController:UIViewController -> MyCustomView:UIView -> MyCustomScrollView:UIScrollView, UIScrollViewDelegate, UICollectionViewDelegate, UICollectionViewDataSource

为什么不可以?:

1) 在各种约束更改后,我在 MyViewController 中执行此操作:

UIView.animate(withDuration: 0.3, animations: {
    self.view.layoutIfNeeded()
}) 

2) 由于 MyCustomView 是一个包含 MyCustomScrollView 的子视图(它又包含一个 UICollectionView 作为它的子视图),布局更新触发 CV 的 willDisplay 委托方法,准确地说,我在该方法下向 MyCustomView 添加了一堆标签。

这是我正在调用的 MyCustomView 中的函数:

func addLabel(forIndexPath indexPath: IndexPath) {

    var label: UILabel!
    label.frame = Util.labelFrame(forIndex: indexPath, fillWidth: false) // The frame for the label is generated here!

    //Will assign text and font to the label which are unnecessary to this context

    self.anotherSubView.addSubview(label) //Add the label to MyCustomView's subview
}

3) 由于这些更改在第 1 点的动画块中被捕获,我得到了一些不必要的、不想要的动画。因此,MyCustomView 的布局更改与此动画块绑定,迫使我寻找一种方法来限制这种情况的发生

到目前为止尝试的事情:

1) 尝试将 addLabel(forIndexPath:) 中的 addSubView() 包裹在 UIView.performWithoutAnimation {} 块中。 - 运气不好

2) 尝试用 0.0 秒的时间将 addLabel(forIndexPath:) 中的 addSubView() 包裹在另一个动画块中,看看这是否会覆盖父动画块 - 运气不好

3) 探索了 UIView.setAnimationsEnabled(enabled:) 但似乎这不会 cancel/pause 现有的动画师,并且将完全禁用 所有动画 如果 true (这不是我想要的)

综上所述,我的问题是:

我需要限制 MyCustomView 上的动画,但我需要进行所有其他所需的布局更改。这可能吗?非常感谢提示或解决方案,TYIA!

感谢 this 的回答,在添加标签后从 anotherSubview 的层(在 addLabel(forIndexPath:) 内)移除所有动画:

self.anotherSubview.addSubview(label)
self.anotherSubview.layer.removeAllAnimations() //Doing this removes the animations queued to animate the label's frame into the view

完全符合我的要求!