2017-01-10 5 views
2

最近、私は顔を描くコードをいくつか作りました。私は前後に揺れるように顔をアニメーション化したかったのです。現在、私はこのコードを持っています。右に1回、次に左に、次に元の位置に回転します。しかし、もし私が頭を無限に前後に振り回したいなら(バスを回転させる)。これを行うために何らかの再帰関数を作ることは可能ですか?スウィフトでのアニメーションの連鎖

@IBAction func shakeHead(_ sender: UITapGestureRecognizer) { 

    UIView.animate(
     withDuration: 0.5, 
     animations: { 
      self.faceView.transform = self.faceView.transform.rotated(by: self.shakeAngle) 
    }, 
     completion:{ finished in 
      if(finished){ 
       UIView.animate(
        withDuration: 0.5, 
        animations: { 
         self.faceView.transform = self.faceView.transform.rotated(by: -(self.shakeAngle)*2) 
       }, 
        completion:{ finished in 
         if(finished){ 
          UIView.animate(
           withDuration: 0.5, 
           animations: { 
            self.faceView.transform = self.faceView.transform.rotated(by: self.shakeAngle) 
          }, 
           completion: nil 
          ) 
         } 
       } 
       ) 
      } 
    } 
    ) 

} 

答えて

3

あなたは、最終的な完成ブロックからshakeHeadを呼び出すことができます。

@IBAction func shakeHead(_ sender: UITapGestureRecognizer) { 

    UIView.animate(
     withDuration: 0.5, 
     animations: { 
      self.faceView.transform = self.faceView.transform.rotated(by: self.shakeAngle) 
    }, 
     completion:{ finished in 
      if(finished){ 
       UIView.animate(
        withDuration: 0.5, 
        animations: { 
         self.faceView.transform = self.faceView.transform.rotated(by: -(self.shakeAngle)*2) 
       }, 
        completion:{ finished in 
         if(finished){ 
          UIView.animate(
           withDuration: 0.5, 
           animations: { 
            self.faceView.transform = self.faceView.transform.rotated(by: self.shakeAngle) 
          }, 
           completion: { finished in 
            shakeHead(sender) 
          } 
          ) 
         } 
       } 
       ) 
      } 
    } 
    ) 
} 

これは技術的には再帰呼び出しですが、コードの非同期性のために問題にはなりません。

+0

ありがとうございます。 –

関連する問題