gpt4 book ai didi

objective-c - NSPopupButton 内的 NSProgressIndicator

转载 作者:行者123 更新时间:2023-12-03 17:56:02 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何让微调器在 NSPopupButton 的菜单项上设置动画。我无法让微调器动画化。它出现了,但没有做任何事情。

到目前为止,我已经将微调器添加到菜单项中,如下所示:

_spinner = [[NSProgressIndicator alloc] initWithFrame:NSMakeRect(0,0,16,16)];
[_spinner setIndeterminate:YES];
[_spinner setStyle:NSProgressIndicatorSpinningStyle];
[_spinner setControlSize:NSSmallControlSize];
[_spinner setDisplayedWhenStopped:YES];
[_spinner setHidden:NO];

NSMenuItem *item = [[button menu] itemWithTag:0];
[item setView:_spinner];

我正在监听 NSPopUpButtonWillPopUpNotification。当我收到通知时,我执行此操作,但微调器出现并且没有动画:

[_spinner setUsesThreadedAnimation:YES];
[_spinner startAnimation:nil];

我编辑了此内容以更新我的问题

最佳答案

试试这个方法:

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

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

您如何引用 View 中的 NSProgressIndicator(以及窗口中的 NSProgressIndicator)?例如,您是否有一个将 IBOutlet 连接到进度指示器的 Controller 类?如果您使用 IBOutlet,您确定它已正确连接到 nib 文件中吗?

此外,您在何时何地调用 startAnimation:? (我们需要查看一些代码)。

有时可能发生的一件事是您忘记在 Nib 中连接 IBOutlet。然后,当您尝试告诉对象在运行时在代码中执行某些操作时,IBOutlet 为 nil,因此您认为发送到对象的消息实际上是发送到 nil 的消息。换句话说,它只是被忽略了,实际上看起来好像不起作用。

如果您确实拥有对 UI 对象的(可能)有效引用,那么您会看到的另一个常见问题是开发人员尝试在“过早”的时间向该对象发送消息。一般来说,init 方法在 Controller 对象的生命周期中还为时过早,无法将消息发送到用户界面对象 - 那些 IBOutlet 仍然为零。当调用 -awakeFromNib 时,IBOutlet 应该是有效的(假设您将它们连接到 IB 中),然后您可以将消息发送到 UI 对象。

关于objective-c - NSPopupButton 内的 NSProgressIndicator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13318279/

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