我正在尝试弄清楚如何让微调器在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];我对此进行了编辑以更新我的问题
发布于 2012-11-10 10:25:57
尝试这样做:
[progressIndicator performSelector:@selector(startAnimation:)
withObject:self
afterDelay:0.0
inModes:[NSArray
arrayWithObject:NSEventTrackingRunLoopMode]];在menuWillOpen:内部,问题似乎是在进度条完成绘制之前调用了startAnimation:。
如何引用视图中的NSProgressIndicator (以及窗口中的那个)?例如,您是否有一个控制器类将IBOutlet连接到进度指示器?如果您使用的是IBOutlet,您确定它已正确连接到nib文件中吗?
另外,您在何时何地调用startAnimation:?(我们需要查看一些代码)。
有时会发生的一件事是,您忘记将IBOutlet连接到笔尖上。然后,当您试图在运行时告诉对象在代码中执行某些操作时,IBOutlet为nil,因此您认为发送到对象的消息实际上是发送到nil的消息。换句话说,它只是被忽略了,实际上看起来它不起作用。
如果您确实有一个(潜在的)对UI对象的有效引用,那么您将看到的另一个常见问题是开发人员试图在“太早”的时候向该对象发送消息。一般来说,init方法在控制器对象的生命周期中还太早,无法向用户界面对象发送消息--这些IBOutlet仍然是空的。在调用-awakeFromNib时,IBOutlet应该是有效的(假设您在IB中将它们挂钩),然后可以将消息发送到UI对象。
https://stackoverflow.com/questions/13318279
复制相似问题