2017-08-15 28 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

你在哪裏把這個代碼 –

+1

保持頭腦的是,在時間,將採取跑1秒的動畫,你的循環將排隊數以百計的動畫。而且他們都沒有設置等待任何以前的動畫完成。 – rmaddy

+0

因爲while循環阻塞了整個應用程序的UI線程,所以這不起作用。而只需執行一次代碼,並在兩個動畫完成後重新開始動畫。 –

回答

0

使用此代碼 - (?Didload)

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

如果有效,請投票。 –