Swift只调用递归函数X次

Swift只调用递归函数X次,swift,uiview,uiviewanimation,Swift,Uiview,Uiviewanimation,我有一个函数,我正在使用动画4 UILabel。动画是链接的,我试图通过创建一个递归函数来减少重复代码,该函数接受标签作为参数,在完成时使用下一个标签调用自身 fileprivate func handleAnimations(firstLabel: UILabel, secondLabel: UILabel) -> Void { UIView.animate(withDuration: 1, delay: 2, usingSpringWithDamping: 1,

我有一个函数,我正在使用动画4 UILabel。动画是链接的,我试图通过创建一个递归函数来减少重复代码,该函数接受标签作为参数,在完成时使用下一个标签调用自身

   fileprivate func handleAnimations(firstLabel: UILabel, secondLabel: UILabel) -> Void {
        UIView.animate(withDuration: 1, delay: 2, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
            firstLabel.alpha = 1
        }) { (_) in
            UIView.animate(withDuration: 1, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseInOut, animations: {
                secondLabel.alpha = 1
            }) { (_) in
                UIView.animate(withDuration: 0.5, delay: 3, usingSpringWithDamping: 0.5, initialSpringVelocity: 0.5, options: .curveEaseInOut, animations: {
                    firstLabel.alpha = 0
                    secondLabel.alpha = 0
                }, completion: { (_) in
                    self.handleAnimations(firstLabel: self.introTextLabelThree, secondLabel: self.introTextLabelFour)
                })
            }
        }
    }
这是实现这一目标的最佳方式吗?如果是这样,我如何防止最后一个完整的块用最后两个标签反复调用自己

我试图达到的效果是:

拉贝隆-逐渐消失

labelTwo-逐渐消失

labelOne和labelTwo-淡出

labelThree-逐渐消失

labelFour-逐渐消失

labelThree和labelFour-淡出


在labelThree和labelFour之后,我希望实现另一个函数调用。

不要这样做。请使用。这将允许您正确地链接动画,而不会出现可怕的末日金字塔

UIView.animateKeyframes(withDuration: 5.0, delay: 0, options: [.calculationModeCubic], animations: {
        // Add animations
        UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 1.0/6.0, animations: {
            self.introTextLabel.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 1.0/6.0, relativeDuration: 1.0/5.0, animations: {
            self.introTextLabelTwo.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 2.0/6.0, relativeDuration: 1.0/5.0, animations: {
            self.introTextLabel.alpha = 0
            self.introTextLabelTwo.alpha = 0
        })
        UIView.addKeyframe(withRelativeStartTime: 3.0/6.0, relativeDuration: 1.0/5.0, animations: {
            self.introTextLabelThree.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 4.0/6.0, relativeDuration: 1.0/5.0, animations: {
            self.introTextLabelFour.alpha = 1
        })
        UIView.addKeyframe(withRelativeStartTime: 5.0/6.0, relativeDuration: 1.0/5.0, animations: {
            self.introTextLabelThree.alpha = 0
            self.introTextLabelFour.alpha = 0
        })
    }, completion:{ _ in
        // fire off whatever other method you want here
    })