ios - 何时在自定义 UIVIew 中添加 CAAnimation?

标签 ios swift caanimation

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

上下文:在我的自定义 UIView 中,我创建动画并将其添加到自定义 init 函数中的图层中。

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

    super.init(colour: color)

    configureBackgroundPulsatingDot()

    addPulsatingAnimation()
}

这个自定义 UIView 位于 View 层次结构的深处,理想情况下,我的 View Controller 不应该因为这个动画而自行触发动画或触发在 viewWillAppear 中添加 View [除了使用 viewWillAppear 或添加 subview 的后期阶段]

有没有办法仍然保留在自定义 View 中添加和启动动画的逻辑,而不需要来自外部方的触发器,该触发器会说“嘿,现在 View 可见,请为自己设置动画”?

或者我应该在自定义 View 生命周期中的哪里添加动画的添加和启动,以使其与 View Controller 生命周期正常工作?

最佳答案

Is there a way to still keep the logic of adding and starting the animation inside my custom view without needing a trigger from an external party which would say "hey now the view is visible, please animate yourself"?

在 View 成为应用 View 层次结构的一部分并且最初绘制之前,没有任何动画可以制作。在此之前您无法制作动画。这就是为什么您会收到标记 View 生命阶段的事件,以便您可以将代码放入正确方法中,该方法将在 View 中的正确时间运行,例如循环。 init错误方法。现在还为时过早。

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

另请注意,即使如此,您也无法一次性添加点并开始为其设置动画。添加后,您必须等待重绘时刻过去,然后才能开始为其设置动画。我通常做的是以很短的延迟进入主线程,以便我的动画代码在当前 CATransaction 提交后运行。

关于ios - 何时在自定义 UIVIew 中添加 CAAnimation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50556088/

相关文章:

iOS : cocoaPods lint issues while using framework

ios - 原生 zlib inflate/deflate for swift3 on iOS

ios - 当前轨道的音频信息 iOS Swift

ios - 动画期间无法获取 CALayer 的当前位置

ios - 如何使用 Swift 3.0 播放附加到图像数组的声音?

ios - 完全删除 UISegmentedControl 分隔符。 (苹果手机)

ios - 故障动画 CAAnimation

ios - 想要在 iphone 中获得像打开相机快门一样的动画

ios - 更新 iPad 版本 8.3 后出现日期格式问题

iOS 10 UserNotifications 背景模式下的自定义声音