2014-04-03 118 views
1

我可以很容易地創建一個類似於UIView的positionsize的動畫。但是,如何爲「自定義」變量(如experiencePoints)設置動畫效果,以實現與UIView關聯的而不是的插值。動畫自定義屬性的值?

// The variable being animated 
CGFloat experiencePoints = 0; 

// Pseudo-code 
[experiencePoints animateTo:200 duration:2 timingFunction:someTimingFunction]; 

有了這個代碼,如果我訪問experiencePoints,而這是動畫,我將根據多久動畫已經持續得到0200之間的值。

獎金問題:是否可以使用CAAnimation來做我想要的?

+1

簡短的回答是你不能。無論如何,通過動畫化物業的價值,你甚至意味着什麼?你的意思是它在標籤或其他UI元素中的值的字符串表示形式嗎?要做到這一點的唯一方法是使用計時器遞增值或遞歸調用顯示該值的方法。 – rdelmar

+1

您可以爲自定義CALayer屬性執行此操作。感興趣嗎? –

回答

0

結束使用Facebook's POP animation library,它允許動畫對象上的任何屬性。我推薦它!

下面是從自述報價,說明如何做到這一點:

該框架提供了許多公共層和查看動畫的屬性出框。您可以通過創建類的新實例來創建自定義屬性的動畫。在這個例子中,我們聲明瞭一個自定義卷屬性:

prop = [POPAnimatableProperty propertyWithName:@"com.foo.radio.volume" initializer:^(POPMutableAnimatableProperty *prop) { 
    // read value 
    prop.readBlock = ^(id obj, CGFloat values[]) { 
    values[0] = [obj volume]; 
    }; 
    // write value 
    prop.writeBlock = ^(id obj, const CGFloat values[]) { 
    [obj setVolume:values[0]]; 
    }; 
    // dynamics threshold 
     prop.threshold = 0.01; 
    }]; 

anim.property = prop; 
+1

如果你能詳細說明這一點,那將會很棒。 –

-1

「動畫」的意思是簡單地將一個值從開始位置移動到結束位置。要在一段時間內將浮動值從一個值「動畫」到另一個值,您可以運行一個計時器並逐步更改它。或者可能你可以存儲「動畫」的開始和結束時間,並且每當訪問該值時,將這些值與實際時間進行比較以得到一個值。

0

您可以使用帶有CADisplayLink的表示層,並通過在動畫狀態中添加觀察者,您可以將變量增加到最後一個。觀察者將觀察動畫的當前狀態,這將最終爲您提供獲取該VAR的當前值的方法。