gpt4 book ai didi

objective-c - 在 NSMenuItem 中使用 NSProgressIndicator

转载 作者:太空狗 更新时间:2023-10-30 03:39:59 24 4
gpt4 key购买 nike

我正在尝试在状态栏菜单中使用 NSProgressIndicator(不确定)。我使用 NSView 对象作为菜单项的 View ,然后 subview 进度指示器以显示它。但是每当我尝试调用 startAnimation: 来获取进度时,什么也没有发生。当我尝试在普通的 NSWindow 上做同样的事情时,它工作得很好,只是在菜单项内时不行。

我对 cocoa 和 objective-c 都是新手,所以我可能忽略了一些“显而易见”的东西,但我已经搜索了很多解决方法但没有成功。我发现有关菜单项的一些信息在显示时无法更新,您需要改用无边框窗口。但我无法在任何文档中证实这一点。

编辑:

好的,现在差不多可以用了。当使用 setUsesThreadedAnimation: 并从 MenuDelegate 的 menuWillOpen 中创建一个新线程时。该线程运行一个本地方法:

-(void) doWork(NSProgressIndicator*) p{
[p startAnimation:self];
}

这将在打开菜单时随机(?)启动进度指示器。如果我直接调用 startAnimation: 而不通过 doWork:(仍然使用新线程),它永远不会工作。 setUsesThreadedAnimation: 不会让进度条为动画创建它自己的线程吗?

最佳答案

通过使用解决了它:

[progressIndicator performSelector:@selector(startAnimation:)
withObject:self
afterDelay:0.0
inModes:[NSArray
arrayWithObject:NSEventTrackingRunLoopMode]];

在 menuWillOpen: 内部,问题似乎是在进度条完成绘制之前调用 startAnimation:。

关于objective-c - 在 NSMenuItem 中使用 NSProgressIndicator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com