2017-08-15 16 views
-3

ラベルをアニメーション化してランダムな座標に何度も移動させようとしていますが、実行すると確認変数を使用してもアニメーションが処理されません他の座標を決定する前にアニメーションは完了しています。 ところで、ラベル間のやりとりを作成するアイデアがある場合は、お互いにぶつかり合ったら、それを書いてください。異なる座標でアニメーションを繰り返す方法

var check = 2 
     var coordinateXLabel1 = 1 
     var coordinateXLabel2 = 1 
     var coordinateYLabel1 = 1 
     var coordinateYLabel2 = 1 
     while 1 == 1 {      //create an infinit loop 
      if check == 2{ 
       check = 0 
       coordinateXLabel1 = Int(arc4random_uniform(324) + 25) 
       coordinateXLabel2 = Int(arc4random_uniform(324) + 25) 
       coordinateYLabel1 = Int(arc4random_uniform(560) + 111) 
       coordinateYLabel2 = Int(arc4random_uniform(560) + 111) 
       UIView.animate(withDuration: 1, animations: { 
        self.label1.center = CGPoint(x: coordinateXLabel1, y: coordinateYLabel1) 
       }, completion: {(finished:Bool) in 
        check += 1 
       }) 
       UIView.animate(withDuration: 1, animations: { 
        self.label2.center = CGPoint(x: coordinateXLabel2, y: coordinateYLabel2) 
       }, completion: {(finished:Bool) in 
        check += 1 
       }) 
      } 
     } 
+0

あなたは(?Didload)にこのコードを入れた –

+1

は、それが1秒のアニメーションを実行するのにかかる時間で、あなたのループが数百をキューになることを心しておきますアニメーションのまた、以前のアニメーションが終了するまで待つような設定はありません。 – rmaddy

+0

whileループがアプリケーション全体のUIスレッドをブロックしているため、これは機能しません。むしろ、コードを一度実行し、両方のアニメーションが完了したらアニメーションを再開してください。 –

答えて

0

使用このコード -

func animate() 
{ 
    var coordinateXLabel1:Int = 1 
    var coordinateYLabel1:Int = 1 
    var coordinateXLabel2:Int = 1 
    var coordinateYLabel2:Int = 1 
    func animateLabel1() 
    { 
     UIView.animate(withDuration: 1, animations: { 
      self.label1.center = CGPoint(x: coordinateXLabel1, y: coordinateYLabel1) 
     }, completion: {(finished:Bool) in 
      coordinateXLabel1 = Int(arc4random_uniform(324) + 25) 
      coordinateYLabel1 = Int(arc4random_uniform(560) + 111) 
      animateLabel1() 
     }) 
    } 
    func animateLabel2() 
    { 
     UIView.animate(withDuration: 1, animations: { 
      self.label2.center = CGPoint(x: coordinateXLabel2, y: coordinateYLabel2) 
     }, completion: {(finished:Bool) in 
      coordinateXLabel2 = Int(arc4random_uniform(324) + 25) 
      coordinateYLabel2 = Int(arc4random_uniform(560) + 111) 
      animateLabel2() 
     }) 
    } 
    animateLabel1() 
    animateLabel2() 
} 
+0

うまくいけば投票してください。 –

関連する問題