我有一个NSSlider对象(连续模式开启),它连接到插座方法
- (IBAction)UpdateValueFromSlider:(id)sender {
[self performSelector:@selector(OutputData) withObject:nil afterDelay:0.02];
}
无论何时移动滑块(而不仅仅是当鼠标上移时)都会根据需要调用。
但是,方法OutputData
本身仅在鼠标上升时调用,而不是在我使用滑块并将其拖动时保持鼠标按下。
为什么会发生这种情况,以及每当更新滑块时如何稍微延迟调用OutputData
?
答案 0 :(得分:5)
滑块的跟踪循环可能以不同的运行循环模式运行运行循环 - 可能是NSEventTrackingRunLoopMode
。 performSelector:withObject:afterDelay:
方法仅在运行循环在NSDefaultRunLoopMode
中运行时触发;正如该方法的文档所说,如果您希望消息在其他运行循环模式中出列,则应使用performSelector:withObject:afterDelay:inModes:
代替。对于inModes:
参数,您可以传递NSArray
,其中包含NSDefaultRunLoopMode
和NSEventTrackingRunLoopMode
;或者甚至更好,你可以简单地通过NSRunLoopCommonModes
,这应该涵盖你的基础,无论Apple将来如何处理运行循环模式。