在值更改时动画化NSLevelIndicator

时间:2012-09-14 12:25:01

标签: objective-c xcode cocoa uiviewanimation nslevelindicator

目前我有以下代码来更新NSLevelindicator:

[self.headerIndicator selfFloatValue:heightValue]

有没有办法在更新值时为值之间的级别指示器设置动画?

3 个答案:

答案 0 :(得分:1)

阅读动画滑块动画的答案。我没有尝试过水平指标,但从API文档来看,这似乎是一个可行的选择。那里的源代码很容易适应:NSSlider animation

答案 1 :(得分:0)

如果[[[self.headerIndicator] animator] setFloatValue:heightValue];不起作用,您必须自己添加该功能。请参阅NSAnimatablePropertyContainer

答案 2 :(得分: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];
    }
}