[在Swift中,我想连续调用多个UIView.animate
。也就是说,当一个动画结束时,然后我希望另一个动画继续播放,依此类推。
对UIView.animate
的呼叫有一个Trailing Closure,我当前正在使用它来进行对UIView.animate
的第二次呼叫。
问题是:我想制作N个单独的动画
摘自UIView.animate
的Apple文档
UIView.animate
动画序列结束时要执行的块对象。该块没有返回值,并且采用单个布尔参数,该布尔参数指示在调用完成处理程序之前动画是否实际完成。如果动画的持续时间为0,则在下一个运行循环周期的开始执行此块。此参数可以为NULL。
理想情况下,我想遍历动画completion
的数组并用于对duration
的调用中>
例如,
遍历数组并为每个动画应用这些参数
animate()
let duration = [3.0, 5.0, 10.0]
let alpha = [0.1, 0.5, 0.66]
进行迭代,🤞希望它能起作用map
中设置一个布尔值来表示动画是连续发生的?UIView
如何制作一个动画
let redBox = UIView() redBox.backgroundColor = UIColor.red self.view.addSubview(redBox) let iterateToAnimate = duration.enumerated().map { (index, element) -> Double in print(index, element, duration[index]) UIView.animate(withDuration: duration[index], // set duration from the array animations: { () in redBox.alpha = alpha[index] }, completion:{(Bool) in print("red box has faded out") }) }
执行两个
let redBox = UIView() redBox.backgroundColor = UIColor.red self.view.addSubview(redBox) // One iteration of Animation UIView.animate(withDuration: 1, animations: { () in redBox.alpha = 0 }, completion:{(Bool) in print("red box has faded out") })
迭代的链的糟糕方法(希望避免)
animate
[在Swift中,我希望对UIView.animate进行多次调用。也就是说,当一个动画结束时,然后我希望另一个动画继续播放,依此类推。调用...
如果参数很少且在编译时已知,则构造链接动画的最简单方法是关键帧动画的帧。
您可以使用var duration = [3.0, 5.0, 10.0]
var alpha = [0.1, 0.5, 0.66] as [CGFloat]
func doTheAnimation() {
if duration.count > 0 {
let dur = duration.removeFirst()
let alp = alpha.removeFirst()
UIView.animate(withDuration: dur, animations: {
self.yellowView.alpha = alp
}, completion: {_ in self.doTheAnimation()})
}
}