2012-11-10 105 views
0

裏面我試圖找出如何讓一個微調動畫上NSPopupButton的菜單項。我無法讓旋轉器動畫。它似乎但它沒有做任何事情。NSProgressIndicator的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

你gettng通知叫什麼?你用BreakPoint檢查過嗎? –

+0

通知正在被調用。使用斷點/日誌記錄進行驗證 – JPC

回答

1

試試這個方法:

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

裏面的menuWillOpen :,問題似乎一直在調用startAnimation:在進度條完成繪製之前。

你是如何引用是在視圖中NSProgressIndicator(和一個窗口,對於這個問題)?例如,你有一個控制器類,它有IBOutlet與進度指示器連接嗎?如果您正在使用IBOutlet,您確定它已正確連接到nib文件中嗎?

而且,何時何地你叫startAnimation:? (我們需要看一些代碼)。

一兩件事,有時會出現的情況是你忘記了掛鉤一個IBOutlet的筆尖。然後,當您嘗試告訴對象在運行時在代碼中執行某些操作時,IBOutlet將爲零,因此,您認爲發送到對象的消息實際上是一條消息發送到nil。換句話說,它只是被忽略,並且看起來好像不起作用。

前提是您必須在UI對象(潛在)有效的參考,你會看到另一個常見問題是當開發人員試圖在一個時間「太早」發送消息的對象。通常情況下,init方法在控制器對象的生命週期中過早以至於無法將消息發送到用戶界面對象 - 那些IBOutlet仍然爲零。在調用-awakeFromNib時,IBOutlet應該是有效的(只要你將它們連接到IB),然後你可以將消息發送到UI對象。

+0

這似乎是個竅門,但我覺得我不應該調用執行選擇器。菜單繪製後有沒有一段時間顯示我可以調用動畫? – JPC

+0

不......你不能依靠時間..這取決於處理器和工作負載......所以通過選擇器來調用它。 –