Как остановить анимацию на определенном NSProgressIndicator? - PullRequest
0 голосов
/ 09 февраля 2011

NSProgressIndicator допускает stopAnimation: при isIndeterminate == YES, но как остановить анимацию для определенных индикаторов выполнения?

Для контекста индикатор выполнения, с которым я пытаюсь это сделать, является дочерним элементом NSView, который сам по себе является свойством view объекта NSMenuItem. Отправка смехотворно больших чисел в setAnimationDelay: делает то, что я хочу, но только временно - когда родительское меню закрывается и открывается снова, индикатор выполнения снова анимируется.

(возможно, ненужный отказ от ответственности: я клянусь, что это законный вариант использования; я должен иметь возможность визуально (т.е. без использования текста) отображать ход выполнения очень длительных задач, которые могут приостановить и перезапустите, если необходимо, бэкэнд. Ответы, которые сводятся к «UI design: ur doin it rong», не будут приняты, если не будут сопровождаться блестящим альтернативным предложением.;))

Ответы [ 2 ]

1 голос
/ 14 августа 2011

Подкласс NSProgressIndicator, как это, он также работает с Lion:

@interface UnanimatedProgressIndicator : NSProgressIndicator {
@private
    BOOL    isAnimating;
}
@end

@interface NSProgressIndicator (HeartBeat)
- (void) heartBeat:(id)sender;      // Apple internal method for the animation
@end

@implementation UnanimatedProgressIndicator

- (void) startAnimation:(id)sender
{
    isAnimating = YES;
    [super startAnimation:sender];
}

- (void) stopAnimation:(id)sender
{
    isAnimating = NO;
    [super stopAnimation:sender];
}

- (void) heartBeat:(id)sender
{
    if (isAnimating)
        [super heartBeat:sender];
}

@end
0 голосов
/ 16 февраля 2011

Решил проблему, используя тот же подход, как описано ранее, с одним небольшим изменением.

Когда делегат меню получает menuNeedsUpdate:, я посылаю setAnimationDelay: (с достаточно большим числом в качестве аргумента) на каждый индикатор выполнения. Теперь это работает надежно, поэтому я достаточно доволен этим.

...