Анимация 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];
}
}