在 Swift 中,将 NSViews 阵列动画化以在 NSStackView 中一个接一个地出现的最佳方式是什么?



我可以使用以下代码将许多NSTextFields添加到NSStackView:

optionsStackView.addView(newOption, in: .center)

我遇到的问题是让每个 NSTextField (newOption( 在视图出现时一个接一个地出现 - 使用 NSAnimationContext.runAnimationGroup { (context( in } 时,不是一次全部出现

        let stackViewSubViews = optionsStackView?.arrangedSubviews.enumerated()
        stackViewSubViews!.forEach({ newOption in
            NSAnimationContext.runAnimationGroup { (context) in
                context.duration = 1
                newOption.element.animator().alphaValue = 1
            }
        })

我基本上需要延迟半秒钟,每次 for 循环运行以显示所有 NSTextFields 的一个接一个的 NSTextField,但我不太清楚如何做到这一点。我看了一下使用DispatchQueue.main.asyncAfter(deadline: .now() + 0.5)但无法完全弄清楚在没有所有内容同时出现的情况下完成这项工作的代码......

我确定我在这里错过了一些简单的东西。

谁能帮忙?

在循环的每次迭代中插入延迟的最简单方法是将循环转换为递归。我将向您展示一般技术,您可以根据自己的用例进行调整:

func slowly(from i:Int, to n:Int) {
    print(i)
    if i != n {
        DispatchQueue.main.asyncAfter(deadline:.now()+0.5) {
            slowly(from:i+1, to:n)
        }
    }
}
slowly(from:1, to:3)

相关内容

最新更新