2016-01-27 58 views
1

我具有被連接到出口方法performSelector:afterDelay:沒有被調用,直到高達

- (IBAction)UpdateValueFromSlider:(id)sender { 
    [self performSelector:@selector(OutputData) withObject:nil afterDelay:0.02]; 
} 

每當所述滑塊移動其被稱作所期望的NSSlider對象(在連續模式)(而不是小鼠只是當鼠標上升時)。

但是,方法OutputData本身只在鼠標上升時調用,而不是在滑動並拖動滑塊時保持鼠標不動。

爲什麼會出現這種情況,並且每次滑塊更新時如何以輕微的延遲呼叫OutputData

+0

爲什麼你想要延遲? – Willeke

+0

使用等效的GCD函數怎麼樣?或者從你正在顯示的代碼段中調用一個常規方法,並在被調用的方法中使用'dispatch_after ....'來延遲任何需要延遲的邏輯。 – cacau

回答

5

滑塊的跟蹤循環大概是以不同的運行循環模式運行運行循環 - 可能是NSEventTrackingRunLoopModeperformSelector:withObject:afterDelay:方法僅在運行循環運行於NSDefaultRunLoopMode時觸發;正如該方法的文檔所述,如果您希望該消息在其他運行循環模式下出列,則應該使用performSelector:withObject:afterDelay:inModes:代替。對於inModes:參數,您可以通過NSArray其中NSDefaultRunLoopModeNSEventTrackingRunLoopMode;或者甚至更好,或許你可以簡單地通過NSRunLoopCommonModes,這應該覆蓋你的基地,而不管蘋果將來如何處理運行循環模式。

+0

這很好,謝謝! –

+0

拯救生命,謝謝 –

相關問題