Анимация NSLevelIndicator при изменении значений

В настоящее время у меня есть следующий код для обновления NSLevelindicator:

[self.headerIndicator selfFloatValue:heightValue]

Есть ли способ анимировать индикатор уровня между значениями при их обновлении?

4 ответа

Решение

Прочитайте этот ответ для анимации ползунков. я не пробовал это с индикаторами уровня, но из документации API это кажется жизнеспособным вариантом. исходный код там легко можно адаптировать: анимация NSSlider

Я пробовал этот код, и он отлично работает:

Swift:self.CpuLevel.maxValue = Double(значение)

Если [[[self.headerIndicator] animator] setFloatValue:heightValue]; не работает, вы должны добавить возможность самостоятельно. Смотрите NSAnimatablePropertyContainer.

Вы можете написать свой собственный метод, что-то вроде этого, чтобы изменить уровень. Здесь математика пытается сохранить общее время "анимации" равным независимо от того, насколько велик переход от старого значения к новому (около 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];
    }
}
Другие вопросы по тегам