2009-07-22 14 views
23

私の理解のために、beginTimeは "ちょっとちょっと、ちょうど12時に始める"と言うのに使うことができます。しかし、私はCFTimeInterval型でこれをどのように伝えますか?私は秒を指定する一種の "浮動小数点"値以上のものではないと考えました。CFTimeIntervalを使用してアニメーションのbeginTimeを指定するにはどうすればよいですか?

それとも他に何その後、CAMediaTimingプロトコルで指定されたTIMEOFFSETプロパティに違いだろうか?

答えて

8

いいえ、それは開始時間が何をするかではありません。これは、親アニメーションからの相対的な開始時間を指定します(デフォルトでは、グループ内の複数のアニメーションはすべて一度に起動します)。 documentationから

が該当する場合、その親 オブジェクトに関連して 受信機の時間を始める指定します。

timeOffsetは、オフセット時のフレームでアニメーションを開始させ、終了時にループします。言い換えれば、A、B、C、D、Eがアニメーションのフレームであると想像してください。これは、beginTimeまたはtimeOffsetを、通常の場合にフレームCをヒットしたときと同じ値に設定すると、私はドキュメントで逃した何

Normal  |A->B->C->D->E 
beginTime: |  A->B->C->D->E 
timeOffset: |C->D->E->A->B 
+1

timeOffsetを設定しても、アニメーションが遅れたり初期時間が変更されることはありません。あなたの 'timeOffset'の行は実際には 'timeOffset'と 'beginTime' ...を設定しているのでしょうか?一部:あなただけのようなアニメーションを実行する方法があるかどうかを知っています –

+0

あなたは、 –

+3

ルイを明確に、正しいです| ----- A-> B-> C、begintimeの場合と基本的に同じですが、周りをループするのではなく終わりになると停止しますか? – pho0

52

:あなたは、現在の時刻を取得し、そこから自分のオフセットを指定するためにきたので、開始時間は、「コアアニメーション絶対時間」である:

// Start in 5 seconds 
theAnimation.beginTime = CACurrentMediaTime()+5; 
+3

beginTimeは絶対時間に相対的ではなく、親の時間空間で指定されます。 – an0

+1

@ an0、明らかに、私の場合、親のタイムスペースはCACurrentMediaTime()と同じなので、うまく動作します。あなたは親の時間空間をどのように参照しますか? –

+0

レイヤタイムスペース(現在のレイヤーに直接追加されたアニメーションの親タイムスペース)の現在の時間をベースとして使用する必要があります。 layerのbeginTimeが0以外の値に設定されていると、コードは機能しません。詳細は私の答えを見てください。 – an0

11

私はドキュメントを考えますのCAMediaTimingプロトコルは非常に悪いです。 Time Warp in Animationは、CAMediaTiming Protocolのすべてのプロパティの詳細な説明(再ドキュメント化)です。

13

あなたはそうのような層の時空へ変換する最初の必要性:

let currentLayerTime = myLayer.convertTime(CACurrentMediaTime(), fromLayer: nil) 

その後、あなたは層の今の時間に開始時間を相対的に設定することができます。例えば、アニメーションが2Sで始まる作るために:

myAnimation.beginTime = currentLayerTime + 2 

をあなたはまた、おそらくあなたは、最終的なプロパティの値を設定することができるようにアニメーションを追加する前に、後方「FILLMODE」に設定することをお勧めします:

関連する問題