2016-12-10 5 views
2

私はプログラミング問題としてstackoverflowに適していると100%確信していません。それは主に数学ロジックの問題なので、私は苦労しています。アニメーションのストロークを計算するタイムスタンプに基づいて開始しますか?

私は以下のコードの一部で円をアニメーション化しています:

// Set the animation duration appropriately 
    animation.duration = duration 

    // Animate from 0 (no circle) to 1 (full circle) 
    animation.fromValue = strokeStart 
    animation.toValue = 1 

    // Do a linear animation (i.e. the speed of the animation stays the same) 
    animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear) 

    // Set the circleLayer's strokeEnd property to 1.0 now so that it's the 
    // right value when the animation ends. 
    progressCircle.strokeEnd = 1.0 

そうで作業中のキー値が値からの期間と、常に1になるだろう終了値です。

円の合計360度は、常に240秒(4分)を表します。

私は円を作成するときに持続時間と開始値の値をプラグインする機能を設定しましたが、苦労しているのは、それらを適切に計算する方法です。

たとえば、私がこれらのサークルの1つを描画しているとき、私はサーバーからタイムスタンプを取得しています。グラブされたタイムスタンプがちょうど120秒前だったとしましょう。円は既に1/2の長さで描画され、円の180度の残りの部分は合計4分間の残りの120秒に描画される必要があります。もう1つの例は、タイムスタンプが3分50秒前に実行された場合、円は基本的にすぐにstrokeStartを高いパーセンテージに設定することで満たされ、次の10秒ではそれはいっぱいになります。

私はタイムスタンプを取得する方法を知っています、私はタイムスタンプが現在の時刻から何秒間取得する方法を知っていますが、私はどのようにstrokeStartを計算するのか分かりません。

これに関するアイデアですか?

答えて

2

円は240秒であり、経過した秒数を知っているので分けるだけです。

let strokeStart = Double(secondsElapsed)/240.0 
+0

ありがとうございます。なぜ私の脳は数学を包むことができないのか分かりません。 多くのことをよろしくお願いします。 – user6820041

関連する問題