2012-09-14 20 views

回答

1

閱讀此答案動畫滑塊。我沒有嘗試過使用級別指標,但從API文檔看來,它似乎是一個可行的選擇。那裏的源代碼很容易適應:NSSlider animation

0

如果[[[self.headerIndicator] animator] setFloatValue:heightValue];不起作用,您必須自己添加功能。見NSAnimatablePropertyContainer

+0

animator不起作用。你有使用NSAnimatablePropertyContainer的示例代碼嗎? – BlindingDawn

+0

您是否閱讀過文檔?谷歌搜索的例子?試過什麼? –

+0

那麼NSAnimatablePropertyContainer的文檔(我如何閱讀它)適用於使用圖形對其進行動畫處理,而不是使用值或將值從一點移動到另一點。我確實找到[LERP](http://stackoverflow.com/questions/1820862/obj-c-linear-interpolation-between-two-數字),它會在兩個值的中間給出一個值。我現在試圖找出一條循環通過一條小曲線的方法,並在該曲線內改變NSLevelIndicator的值。 – BlindingDawn

0

你可以編寫自己的方法,像這樣改變關卡。那裏的數學試圖保持總的「動畫」時間相等,無論從舊值到新值的轉換有多大(用這些值大約1秒)。

-(void)updateLevel:(NSNumber *) newLevelNum { 
    float currentLevel = self.level.floatValue; 
    float newLevel = newLevelNum.floatValue; 
    if (self.delay == 0.0) // self.delay is a float property set to 0.0 elsewhere 
     self.delay = .2 /(newLevel - currentLevel); 
    [self.level setFloatValue:currentLevel + .2]; 
    if (self.level.floatValue - newLevel < .01){ 
     [self performSelector:@selector(updateLevel:) withObject:newLevelNum afterDelay:self.delay]; 
    } 
}