我正在试图弄清楚如何让一个微调器在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];
我编辑了这个以更新我的问题
答案 0 :(得分:1)
尝试这种方式:
[progressIndicator performSelector:@selector(startAnimation:)
withObject:self
afterDelay:0.0
inModes:[NSArray
arrayWithObject:NSEventTrackingRunLoopMode]];
在menuWillOpen:中,问题似乎是调用startAnimation:在进度条完成绘制之前。
如何引用视图中的NSProgressIndicator(以及窗口中的NSProgressIndicator)?例如,你有一个控制器类,它将IBOutlet连接到进度指示器吗?如果你使用的是IBOutlet,你确定它已经在nib文件中正确连接了吗?
此外,您在何时何地呼叫startAnimation:? (我们需要看一些代码)。
有时可能发生的一件事是你忘记在笔尖中连接一个IBOutlet。然后,当您尝试告诉对象在运行时在代码中执行某些操作时,IBOutlet为零,因此您认为发送到对象的消息实际上是发送给nil的消息。换句话说,它只是被忽略了,实际上看起来它没有用。
如果您对UI对象有(可能)有效的引用,那么您将看到的另一个常见问题是当开发人员试图“过早”向该对象发送消息时。通常,init方法在控制器对象的生命周期中太早,无法向用户界面对象发送消息 - 这些IBOutlet仍然是零。在调用-awakeFromNib时,IBOutlet应该是有效的(假设您将它们连接到IB中),然后您可以将消息发送到UI对象。