Swift只调用递归函数X次
我有一个函数,我正在使用动画4 UILabel。动画是链接的,我试图通过创建一个递归函数来减少重复代码,该函数接受标签作为参数,在完成时使用下一个标签调用自身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,
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
})