如何在ViewDidLoad中的另一个方法完成后才调用一个方法



我正在尝试制作一个应用程序,在开始时对象A开始褪色。

在对象A完全褪色之后,我希望对象B立即开始褪色。

我尝试将以下代码放入ViewDidLoad方法中,但它们同时运行。你知道如何在初始负载后一次接一次地运行吗?

ObjectA.isHidden = false
UIView.animate(withDuration: 5.0, animations: { () -> Void in
self.Fader.alpha = 0
})
ObjectB.isHidden = false
UIView.animate(withDuration: 1.0, animations: { () -> Void in
self.Intro.alpha = 0
})

您可以嵌套它们

UIView.animate(withDuration: 5.0, delay: 0.0, options: [.curveLinear,.allowUserInteraction], animations: { 
self.fader.alpha = 0 
}) { (fin) in 
self.objectB.isHidden = false
UIView.animate(withDuration: 1.0, animations: { () -> Void in
self.Intro.alpha = 0
}) 
}

将动画嵌套在第一个动画的完成块中是非常好的。但对于分组多个动画,值得考虑CAAnimation Groups。

这是一个ray wenderlich教程,它通过一个简单的CAAnimationGroup

苹果的文档有一个很好的例子,但你必须为每个动画指定beginTime(否则每个动画都将同时运行(:

let fadeOut = CABasicAnimation(keyPath: "opacity")
fadeOut.fromValue = 1
fadeOut.toValue = 0
fadeOut.duration = 1
fadeOut.beginTime = 0.0
let expandScale = CABasicAnimation()
expandScale.keyPath = "transform"
expandScale.valueFunction = CAValueFunction(name: kCAValueFunctionScale)
expandScale.fromValue = [1, 1, 1]
expandScale.toValue = [3, 3, 3]
expandScale.beginTime = fadeOut.beginTime + fadeOut.duration
let fadeAndScale = CAAnimationGroup()
fadeAndScale.animations = [fadeOut, expandScale]
fadeAndScale.duration = fadeOut.duration + expandScale.duration

最新更新