我正在尝试在状态栏菜单内使用 NSProgressIndicator (不确定)。我使用 NSView 对象作为菜单项的视图,然后子视图进度指示器来显示它。但是每当我尝试调用 startAnimation: 来获取进度时,什么也没有发生。当我尝试在普通 NSWindow 上做同样的事情时,它工作得很好,只是在菜单项内时不行。
我对可可和 Objective-C 都很陌生,所以我可能忽略了一些“明显”的东西,但我已经搜索了很多解决方法,但没有成功。我发现有关菜单项的一些内容在显示时无法更新,并且您需要使用无边框窗口。但我无法在任何文档中证实这一点。
Edit:
好的,现在差不多可以用了。当使用 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: 。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)