検査の結果、v
ビューのデフォルトのalpha
は1.0
です。これは、アニメーションが1秒間に終了した後にもう一度alpha
になるとアニメーションが繰り返されることを意味します。これを補うには、を実行する前にalpha
を0.0
に設定することを検討してください。
更新:
あなたは4つの状態にアニメーションをあなたのコードを破ることができます。
- 先頭には、
alpha
は1.0
です。
- 最初のキーフレームでは、
alpha
が0.0
に0.5秒で変更されます。
- 2番目のキーフレームは、
alpha
を0.5秒で0.5
に変更します。
- この時点で、アニメーションは終了しました。したがって、
v
ビューは状態に戻り、アニメーションを繰り返します。
州はv
ビューが0.0
秒で0.5
から1.0
に起こっているので、フルalpha
の点滅が発生する場所です。しかし、コンピュータは0.0
秒で何も起きることはできません。複雑な物理現象のため実際には可能ではありません。その結果、コンピュータは0.0
秒にできるだけ近づくように、alpha
の分割秒点滅になります。あなたはそのための方法は、アニメーションの状態がその状態の結果と同じになります、またはあなたがalpha
背中をもたらす別のキーフレームを追加することができます0.5
に元alpha
を設定するか、これを回避するには
例:
オプション1:
0.0
にアニメーションが終わる前に
//Import Statements
//Configuration and Initialization of v view
v.alpha = 0.5 //<--- This is the key point
UIView.animateKeyframesWithDuration(1, delay: 0, options: .Repeat, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: 0.5, animations: {
v.alpha = 0.0
})
UIView.addKeyframeWithRelativeStartTime(0.5, relativeDuration: 0.5, animations: {
v.alpha = 0.5
})
}, completion: nil)
XCPlaygroundPage.currentPage.liveView = v
オプション2:
//Import Statements
//Configuration and Initialization of v view
v.alpha = 0.0 //<-- Make sure to set the original alpha to 0.0
let duration: NSTimeInterval = 1.8
let third: NSTimeInterval = 1/3
UIView.animateKeyframesWithDuration(duration, delay: 0, options: .Repeat, animations: {
UIView.addKeyframeWithRelativeStartTime(0, relativeDuration: third, animations: {
v.alpha = 0.0
})
UIView.addKeyframeWithRelativeStartTime(third, relativeDuration: third, animations: {
v.alpha = 0.5
})
//Key Point Below. Added Another Frame!
UIView.addKeyframeWithRelativeStartTime(third*2, relativeDuration: third, animations: {
v.alpha = 0.0
})
}, completion: nil)
XCPlaygroundPage.currentPage.liveView = v
Iは、元のアルファは、それが反復間でその値にスナップバックなぜ思ったんだけど1であったことがわかります。私はその行動が驚くべきことを発見した。私はCAAnimationsが完了したら削除されていることを知っています、それは基本的にちょうどそれを避けるための方法ですか? –
@ThomasAbendは、改善された説明と可能な解決方法については、私のアップデートを参照してください。 – Ike10