0

我可以使用以下代码向 NSStackView 添加多个 NSTextField:

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 循环运行时,我基本上需要延迟半秒,以便为所有 NSTextField 一个接一个地显示一个 NSTextField,但我不知道该怎么做。我看着使用DispatchQueue.main.asyncAfter(deadline: .now() + 0.5),但不能完全弄清楚在没有所有东西同时出现的情况下完成这项工作的代码......

我确定我在这里遗漏了一些简单的东西。

有人可以帮忙吗?

4

1 回答 1

0

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

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)
于 2019-11-23T19:32:04.353 回答