对于UIView.animate`,是否可以*链接* Swift尾随闭包?

问题描述 投票:-1回答:2

[在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]
  • Xcode版本11.4.1(11E503a)
  • 我尝试过的

使用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进行多次调用。也就是说,当一个动画结束时,然后我希望另一个动画继续播放,依此类推。调用...

    ios swift animation closures uiviewanimation
    2个回答
    2
    投票

    如果参数很少且在编译时已知,则构造链接动画的最简单方法是关键帧动画的帧。


    0
    投票

    您可以使用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()}) } }

    © www.soinside.com 2019 - 2024. All rights reserved.