Swift - 如何在for循环中处理完成块?

时间:2017-06-11 08:30:23

标签: ios swift multithreading block

我想一个接一个地显示多个动画。 gifArray包含动画列表。我在for循环中循环这个数组。最后一个动画正在显示和完成。

如果仅在当前循环动画结束时如何继续每个循环?

for index in 0..<gifArray.count {
   self.makeAnimation(value: index)
}

func makeAnimation(value: Int){ 
    let anotherAnimationView = LOTAnimationView(name: gifNames[value])
    animationView = anotherAnimationView
    animationView?.play(completion: { finished in
        print("completed")
    })
    self.view.addSubview(animationView!)
}

2 个答案:

答案 0 :(得分:1)

您可以在功能中添加completionHandleranimation完成时可以调用该功能:

func makeAnimation(value: Int, onCompletion: @escaping (LOTAnimationView) -> Void) {
    let anotherAnimationView = LOTAnimationView(name: gifNames[value])
    animationView = anotherAnimationView
    animationView?.play(completion: { finished in
        print("completed")
        onCompletion(animationView)
    })
}

要使用它,请使用以下内容:

makeAnimation(value: 1000000) { (animationView) in
    self.view.addSubview(animationView!)
}

答案 1 :(得分:0)

内部循环无法控制循环执行。所以我从for循环中取出了makeAnimation函数。谢谢@Rashwan L的帮助。

self.callGIFAnimation(value: self.index){ (completed) in
      if(completed) {
          self.index = self.index + 1
          if self.index < gifNames.count {
                self.makeAnimation()
          }
          else {
              return
          }
      }
}