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

Stu*_*rth 1 macos cocoa

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

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

每当移动滑块时(而不仅仅是当鼠标上移时),它都会被调用.

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

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

bha*_*ler 5

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