Objective c 修改器标志的NSEvent全局事件监视返回混合结果

Objective c 修改器标志的NSEvent全局事件监视返回混合结果,objective-c,macos,cocoa,nsevent,Objective C,Macos,Cocoa,Nsevent,关于修改器标志更改的全局监控,出现了一个特殊的问题 假设监视器如下所示 _flagsChangedGlobalEventHandler = [NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask handler:^(NSEvent *event) { NSLog(@"Global flags changed event"); NSLog(@"[NSEvent modifierFlags] is %i

关于修改器标志更改的全局监控,出现了一个特殊的问题

假设监视器如下所示

_flagsChangedGlobalEventHandler = [NSEvent addGlobalMonitorForEventsMatchingMask:NSFlagsChangedMask
handler:^(NSEvent *event) {

    NSLog(@"Global flags changed event");

    NSLog(@"[NSEvent modifierFlags] is %i and [event modifierFlags] is %i",
          [NSEvent modifierFlags], [event modifierFlags]);
}
最初,按left命令时,日志提供以下内容:

[NSEvent modifierFlags]为1048576,[event modifierFlags]为1048840

在释放left命令之后:

[NSEvent modifierFlags]为0,[event modifierFlags]为256

现在,在我用三个手指按住标题栏区域移动MacBook上的一个窗口后,同一显示器会显示以下结果:

[NSEvent modifierFlags]为1048576,[event modifierFlags]为1048584

在释放left命令之后: [NSEvent modifierFlags]为0,[event modifierFlags]为0

问题是:

  • 为什么[event modifierFlags]返回不同的值,特别是在没有保留修饰符的情况下返回256

  • 为什么三指窗口移动手势会导致[event modifierFlags]更改-256

  • 我推测这可能与caps lock有关,但我不确定为什么类和ivar修饰符Flags返回不同的结果


    我在10.7.3上。

    没关系-这一个解释了它!这很有趣——我已经准备好回答了,直到我看到你的评论链接到我的另一个答案!