Ios 何时在自定义UIVIew中添加动画?

Ios 何时在自定义UIVIew中添加动画?,ios,swift,caanimation,Ios,Swift,Caanimation,问题:仅当我在ViewWillDisplay或更高版本中添加视图时,我的自定义UIView动画才会显示 上下文:在自定义UIView中,我在自定义初始化函数中创建动画并将其添加到层中 override init(color: UIColor) { backgroundPulsatingDotView = RouteIndicatorDotView(color: color) super.init(colour: color) configureBackgroundPu

问题:仅当我在ViewWillDisplay或更高版本中添加视图时,我的自定义UIView动画才会显示

上下文:在自定义UIView中,我在自定义初始化函数中创建动画并将其添加到层中

override init(color: UIColor) {
    backgroundPulsatingDotView = RouteIndicatorDotView(color: color)

    super.init(colour: color)

    configureBackgroundPulsatingDot()

    addPulsatingAnimation()
}
此自定义UIView位于视图层次结构的深处,理想情况下,我的视图控制器不应因为此动画而自行触发动画或触发在ViewWillDisplay中添加视图[除了使用ViewWillDisplay或更高阶段添加子视图时出现的其他错误]

有没有一种方法可以保持在我的自定义视图中添加和启动动画的逻辑,而不需要外部方的触发器,该触发器会说“嘿,现在视图是可见的,请自己制作动画”

或者,我应该在自定义视图生命周期中的何处添加动画的添加和开始,以使其在视图控制器生命周期中正常工作

有没有一种方法可以保持在我的自定义视图中添加和启动动画的逻辑,而不需要外部方的触发器,该触发器会说“嘿,现在视图是可见的,请自己制作动画”

在视图成为应用程序视图层次结构的一部分并最初绘制之前,没有任何可设置动画的内容。在此之前,您无法设置动画。这就是为什么会向您发送标记视图生命阶段的事件,以便您可以将代码放入正确的方法中,该方法将在视图的类似周期中的正确时间运行
init
是错误的方法。现在太早了

尝试重写另一个生存期方法-可能类似于
layoutSubviews
(但请注意:这可能会被多次调用,因此您需要使用Bool标志,以便仅在第一次启动动画)


还要注意的是,即使这样,也不能在一次移动中添加点并开始为其设置动画。添加后,必须等待重画时刻过去,然后才能开始设置动画。我通常会在很短的延迟时间内跳转到主线程,这样我的动画代码就会在当前CATTransaction提交后运行。

有时我会觉得你在stack:D上不停地在线。我猜这没有简单的解决方案。。。我想知道有没有什么干净的方法可以通过创建一个自定义层并听取它的委托方法来实现……我认为您应该坚持基于视图的方法。视图获取各种有用的生存期事件(当我们添加到超级视图、添加到窗口、重画、布局等)。层不会。我通常只将动画放在
viewdide
/
willDisplay(cell:)
等中,然后添加一个布尔值,告诉我是否应该再次设置动画。