NSProgressIndicator在stopAnimation:
时允许isIndeterminate == YES
,但如何为确定的进度条停止动画?
对于上下文,我尝试使用的进度条是NSView的子级,NSView本身是NSMenuItem的view
属性。将可笑的高数字发送到setAnimationDelay:
可以实现我想要的,但只是暂时的 - 当父菜单关闭并重新打开时,进度条会再次动画。
(可能不必要的免责声明:我发誓这是一个合法的用例;我必须能够在视觉上(即:不使用文本)显示非常长时间运行的任务的进度根据后端的需要暂停和重新启动。除非伴随着一个精彩的替代建议,否则将不会接受归结为“UI设计:你在做什么”的答案。;))
答案 0 :(得分: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
答案 1 :(得分:0)
使用与前面描述相同的方法解决问题,只做了一个小改动。
当菜单的代表收到menuNeedsUpdate:
时,我会向每个进度条发送setAnimationDelay:
(带有足够大的数字作为arg)。现在这个工作可靠,所以我对它很开心。