2016-01-27 22 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

拯救生命,谢谢 –

相关问题