2016-10-05 17 views
0

一連のアニメーションをどのように実行するかは完全にはわかりません。これを試すと、通常、関数内の最後のものにスキップします。Swift Animations - シーケンスを実行する

は上向きにも その後、2 UILabelUIImageView以下)300ポイント、300ポイント上向きのは、私は2 UIImageView(サイドバイサイド)を移動したいとしましょう。

次に、ラベルを1から10までカウントアップしたいとします。

最後に、ラベルの数が10になると、UIImageViewUILabelを300ポイント戻してください。

func moveLabelUP() { 

    label.center = CGPoint(x: label.center.x - 300, y: label.center.y) 

    UILabel.animate(withDuration: 5) { 

     self.label.center = CGPoint(x: self.label.center.x + 300, y: self.label.center.y) 

    func startLabelCountUp(){ 
    timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateLabel), userInfo: nil, repeats: true) 
} 

func updateLabel(){ 
    if self.current < elapsedTime { 
     self.current += 1 

     self.label.text = "\(self.current)" 
    }else{ 
     self.timer.invalidate() 
    } 
} 

どのようにこれらのイベントチェーンを接続できますか?

UILabelごとにタイマーが開始されるまでに遅延を適用するにはどうすればよいですか?

UIImageViewを発生させたい場合は、UILabelが10になります。その後、UIImageViewが下がります。これは、最初のものの右に次のUIImageViewUILabelのために繰り返されるべきです。

+0

制約を使用していますか? –

+0

私は今、制約を使用していません。 私はいくつかのアニメーションを作っています。 1セットは画面から開始して表示されます。 もう一方は10ポイントだけ上に移動しています。 –

答えて

2

これは私が使っている方法です。それは単なる基本概念ですが、あなたはアイデアを得るでしょう。私の場合、私は定数でそれを使用していました。

UIView.animate(withDuration: duration, animations: { 

    // Your changes to the UI, eg. moving UIImageView up 300 points 

    }) { (success) in 

     // This executes when animation is completed 
     // Create another animation here. It starts when previous ends 

     UIView.animate(withDuration: duration2, animations: { 

      // Your changes to the UI 

      }, completion: { (success) in 

        // This executes when animation is completed 

      }) 

}) 

他のフレームワークもチェックしてください。いくつかのフレームワークがあります。私はCheetahを試してみました。これはアニメーションの連鎖をサポートしていてとてもうまく動作します。

ご不明な点がありましたら、お尋ねください。

関連する問題