performSelector:afterDelay:直到鼠标向上才被调用

时间:2016-01-27 03:46:37

标签: macos cocoa

我有一个NSSlider对象(连续模式开启),它连接到插座方法

- (IBAction)UpdateValueFromSlider:(id)sender {
    [self performSelector:@selector(OutputData) withObject:nil afterDelay:0.02];
}
无论何时移动滑块(而不仅仅是当鼠标上移时)都会根据需要调用

但是,方法OutputData本身仅在鼠标上升时调用,而不是在我使用滑块并将其拖动时保持鼠标按下。

为什么会发生这种情况,以及每当更新滑块时如何稍微延迟调用OutputData

1 个答案:

答案 0 :(得分:5)

滑块的跟踪循环可能以不同的运行循环模式运行运行循环 - 可能是NSEventTrackingRunLoopModeperformSelector:withObject:afterDelay:方法仅在运行循环在NSDefaultRunLoopMode中运行时触发;正如该方法的文档所说,如果您希望消息在其他运行循环模式中出列,则应使用performSelector:withObject:afterDelay:inModes:代替。对于inModes:参数,您可以传递NSArray,其中包含NSDefaultRunLoopModeNSEventTrackingRunLoopMode;或者甚至更好,你可以简单地通过NSRunLoopCommonModes,这应该涵盖你的基础,无论Apple将来如何处理运行循环模式。