2017-06-11 11 views
1

複数のアニメーションを1つずつ表示したいです。 gifArrayにはアニメーションのリストがあります。私はforループでこの配列をループしています。最後のアニメーションが表示され、終了しています。Swift - for-loopの完了ブロックを処理する方法は?

現在のループアニメーションが終了した場合にのみ、どのループを続けることができますか?

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!) 
} 
+1

アニメーションを実行する前に 'addSubview'を試してみましたか? – TawaNicolas

+0

@TawaNicolasはい。それは実行する前に追加されます。変更はありません。 – Balasubramanian

答えて

1

あなたはanimationが完了したときに呼び出すことができますあなたの関数にcompletionHandlerを追加することができます。

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!) 
} 
+0

お返事ありがとうございます。各ループは1つずつ表示されません。それでも同じことが起こっている。 – Balasubramanian

+0

@Balasubramanianの場合、アニメーションビューをcompletionHandlerに渡して代わりに完了したら、追加した答えを確認してください。 –

+0

@Balasubramanian、あなたはそれを動作させるために管理できましたか? –

0

ループcouldn内部ループの実行を制御することはできません。そこで、私は関数をfor-loopから取り出しました。あなたの助けに感謝@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 
      } 
     } 
} 
関連する問題