轉載自 http://www.cnblogs.com/bucengyongyou/archive/2012/12/20/2826590.html Mark
CABasicAnimation 自己只有三個property fromValue toValue ByValue
當你建立一個 CABasicAnimation 時,你需要通過-setFromValue 和-setToValue 來指定一個開始值和結束值。 當你增加基礎動畫到層中的時候,它開始運行。當用屬性做動畫完成時,例如用位置屬性做動畫,層就會立刻 返回到它的初始位置
記住當你做動畫時,你至少使用了 2 個對象。這些對象都是層本身,一個層或者層繼承的對象,和在先前 的例子中你分配給層的 CABasicAnimation 對象。因為你給動畫對象設定了最後的值(目的地),但是並不意 味著當動畫完成的時候,層的屬性就改變成了最後的值。當動畫完成時,你必須顯示的設定層的屬性,這樣動 畫結束後,你的層才能真正的到你設定的屬性值上。
你可以簡單的停止動畫到你結束的點上,但是這僅僅是一個視覺效果。層實際的值仍然是一樣的。要真的 改變內部的值,就像剛才所說的你必須顯示的設定那個屬性。例如,顯示的設定位置的屬性,你需要在層中調 用-setPosition 方法。但是,這會造成一點問題。
如果你通過-set 這個方法顯示的設定了層屬性的值,那麼預設的動畫將被執行,而非之前你設定的動畫。 在表 3-9 中示範了你設定位置的方法。注意到了,我們使用 position 已經建立了基礎動畫,但是我們在層上顯 示的調用了-setPosition 方法,就覆蓋了我們設定的動畫,使我們設定的基礎動畫完全沒用了。如果你使用了這 個代碼,你會看到雖然我們的層結束的時候放到了正確的位置,但是它使用的是預設的 0.25 秒,而非我們在 動畫裡顯示設定的 5 秒鐘。
1 2 3 4 |
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@”position”]; [animation setFromValue:[NSValue valueWithPoint:startPoint]]; [animation setToValue:[NSValue valueWithPoint:endPoint]]; [animation setDuration:5.0]; [layer setPosition:endpoint]; [layer addAnimation:animation forKey:nil]; |
因此現在問題出來了,你怎麼能使用我們設定的動畫呢?看錶 3-9 的最後一行,注意到 forKey:這個參數 是被設定為 nil。這就是為什麼動畫不能覆蓋預設動畫的原因。如果你改變最後一行為[layer addAnimation:animation forKey:@"position"],動畫將會按照我們設定的時間工作。這告訴了層當需要做動畫時, 使用我們給關鍵路徑指定的新動畫。
下面是一些繼承的遊泳的屬性
Autoreverses
當你設定這個屬性為 YES 時,在它到達目的地之後,動畫的返回到開始的值,代替了直接跳轉到 開始的值。
Duration
Duration 這個參數你已經相當熟悉了。它設定開始值到結束值花費的時間。期間會被速度的屬性所影響。 RemovedOnCompletion
這個屬性預設為 YES,那意味著,在指定的時間段完成後,動畫就自動的從層上移除了。這個一般不用。
假如你想要再次用這個動畫時,你需要設定這個屬性為 NO。這樣的話,下次你在通過-set 方法設定動畫的屬 性時,它將再次使用你的動畫,而非預設的動畫。
Speed
預設的值為 1.0.這意味著動畫播放按照預設的速度。如果你改變這個值為 2.0,動畫會用 2 倍的速度播放。 這樣的影響就是使期間減半。如果你指定的期間為 6 秒,速度為 2.0,動畫就會播放 3 秒鐘---一半的 期間。
BeginTime
這個屬性在組動畫中很有用。它根據父動畫組的期間,指定了開始播放動畫的時間。預設的是 0.0.組 動畫在下個段落中討論“Animation Grouping”。
TimeOffset
如果一個時間位移量是被設定,動畫不會真正的可見,直到根據父動畫組中的執行時間得到的時間都流逝 了。
RepeatCount
預設的是 0,意味著動畫只會播放一次。如果指定一個無限大的重複次數,使用 1e100f。這個不應該和 repeatDration 屬性一塊使用。
RepeatDuration
這個屬性指定了動畫應該被重複多久。動畫會一直重複,直到設定的時間流逝完。它不應該和 repeatCount 一起使用。
下面這段英文摘自蘋果官方文檔,將的是fromValue toValue ByValue 怎麼使用
The interpolation values are used as follows:
Both fromValue and toValue are non-nil. Interpolates between fromValue and toValue.
fromValue and byValue are non-nil. Interpolates between fromValue and (fromValue + byValue).
byValue and toValue are non-nil. Interpolates between (toValue - byValue) and toValue.
fromValue is non-nil. Interpolates between fromValue and the current presentation value of the property.
toValue is non-nil. Interpolates between the current value of keyPath in the target layer’s presentation layer andtoValue.
byValue is non-nil. Interpolates between the current value of keyPath in the target layer’s presentation layer and that value plus byValue.
All properties are nil. Interpolates between the previous value of keyPath in the target layer’s presentation layer and the current value of keyPath in the target layer’s presentation layer.
其他的方法 還是屬性等 都