0

NSProgressIndicator 允许stopAnimation:when isIndeterminate == YES,但是如何停止确定进度条的动画?

对于上下文,我尝试使用的进度条是 NSView 的子项,它本身是viewNSMenuItem 的属性。发送高得离谱的数字setAnimationDelay:来做我想要的,但只是暂时的——当父菜单关闭并重新打开时,进度条再次动画。

(可能不必要的免责声明:我发誓这是一个合法的用例;我必须能够直观地(即:不使用文本)显示非常长时间运行的任务的进度,这些任务可能会根据后端的需要暂停和重新启动. 除非附有绝妙的替代建议,否则不会接受归结为“UI 设计:你做到这一点”的答案。;) )

4

2 回答 2

1

像这样的子类 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
于 2011-08-14T17:05:49.747 回答
0

使用与前面描述的相同的方法解决了这个问题,只是做了一点小改动。

当菜单的代表收到menuNeedsUpdate:时,我将setAnimationDelay:(以足够大的数字作为 arg)发送到每个进度条。这现在可以可靠地工作,所以我对它很满意。

于 2011-02-16T18:11:47.717 回答