2010-10-26 24 views
5

嗨,我從多個圖像創建一個關鍵幀動畫。我的問題是我想動畫立即從一個圖像更改爲下一個,而不是褪色。CAKeyframeAnimation

CALayer *animLayer = [CALayer layer]; 
    animLayer.bounds = CGRectMake(0, 0, width, height); 
    animLayer.position = CGPointMake(0, 0); 

    CAKeyframeAnimation *customFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"contents"]; 
    NSArray *sizeValues = [NSArray arrayWithObjects:(id)image1, (id)image2, nil]; 
    NSArray *times = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.5f], nil]; 
    NSArray *timingFunctions = [NSArray arrayWithObjects: [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault], nil]; 

    [customFrameAnimation setValues:sizeValues]; 
    [customFrameAnimation setKeyTimes:times]; 

    customFrameAnimation.duration=5.0; 
    customFrameAnimation.beginTime = 1e-100; 
    customFrameAnimation.fillMode = kCAFillModeRemoved; 
    customFrameAnimation.timingFunctions = timingFunctions; 
    customFrameAnimation.removedOnCompletion = YES; 
    [animLayer addAnimation:customFrameAnimation forKey:nil]; 

在此先感謝。

回答

13

您的動畫將需要將其計算模式設置爲kCAAnimationDiscrete。

看一看的documentation on keyTimes它描述了calculationMode如何使用:

在keyTimes的適當值 陣列依賴於 calculationMode屬性。

  • 如果calculationMode設置爲 kCAAnimationLinear,在 第一個值的數組必須是0.0,最後 值必須是1.0。插值在指定鍵 次之間的值爲 。

  • 如果calculationMode設置 到kCAAnimationDiscrete,陣列中的第一 值必須爲0.0。

  • 如果 calculationMode設爲 kCAAnimationPaced或 kCAAnimationCubicPaced,所述keyTimes 陣列被忽略。

如果 keyTimes數組中的值是無效的 不適合calculationMode, 的keyTimes陣列被忽略。

然後你就可以讀取計算模式的描述:

值計算模式

這些常數是由 calculationMode財產使用。

NSString * const kCAAnimationLinear;

NSString * const kCAAnimationDiscrete;

NSString * const kCAAnimationPaced;

常量

kCAAnimationLinear

簡單線性 關鍵幀值之間的計算。
適用於Mac OS X v10.5及更高版本。 在CAAnimation.h中聲明。

kCAAnimationDiscrete

每個關鍵幀值時,輪流使用,沒有內插 值被計算。 可用於 Mac OS X v10.5及更高版本。 在CAAnimation.h中聲明。

kCAAnimationPaced

關鍵幀值進行內插,產生整個動畫甚至 步伐。
適用於Mac OS X v10.5及更高版本。 在CAAnimation.h中聲明。

換句話說,離散計算模式使動畫跳轉到每個關鍵幀而不是動畫/轉換到它。

此致敬禮。

+0

謝謝,感謝幫助。我喜歡這個論壇! – user346443 2010-10-30 04:18:09