uch*_*aka 2 cocoa objective-c nsevent
当使用NSEvent flagsChanged并使用各种KeyMasks对标志进行AND运算时,如何以独占方式测试?目前,使用一系列if else条件的模式:
if ((flags & someKeyMask) && (flags someOtherKeyMask))
Run Code Online (Sandbox Code Playgroud)
即使第三个修改键已关闭,这也将匹配.在if else条件中更早地放置一系列关键掩码使得行为按照需要工作,但在某种程度上感觉不完整.说"只有这些修饰键,而不是任何其他键"是一种好方法吗?
这是一个更具体的例子,其中第一个与其他人匹配.我想知道是否有办法为每一个添加一些逻辑"只有这些修饰键".
if ((flags & (NSCommandKeyMask|NSControlKeyMask))) {
NSLog(@"one");
}else if (((flags & NSCommandKeyMask) && (flags & NSAlternateKeyMask)) && (flags & NSControlKeyMask)) {
NSLog(@"Command+Option+Control ");
} else if ((flags & NSCommandKeyMask) && (flags & NSShiftKeyMask)) {
NSLog(@"Command+Shift ");
} else if ((flags & NSCommandKeyMask) && (flags & NSControlKeyMask)) {
NSLog(@"Command+Control");
} else if ((flags & NSCommandKeyMask) && (flags & NSAlternateKeyMask)) {
NSLog(@"Command+Option ");
}
Run Code Online (Sandbox Code Playgroud)
所以我正在寻找的正确模式,由Ken Thomases提供:
flags &= (<one or more masks bitwise OR'd together);
if (flags == (<one or more masks bitwise OR'd together)) { // do something }
这提供了独家匹配.
首先,您需要知道返回的值-modifierFlags
包含一些与键不完全对应的标志.你应该构建一个掩码,其中包含你关心的所有标志(无论你是否关心它们被按下或没有按下).将标志值传递给该掩码,然后将结果与您想要的组合进行比较.
例如,如果您关心Command,Option,Shift和Control,并且您想知道确切的Command和Shift是否已关闭但其他人不是,则可以使用:
if ((flags & (NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask)) == (NSShiftKeyMask|NSCommandKeyMask))
// do something
Run Code Online (Sandbox Code Playgroud)
更新:以下是检查各种组合的方法:
flags &= NSShiftKeyMask|NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask;
if (flags == (NSControlKeyMask|NSAlternateKeyMask|NSCommandKeyMask))
NSLogs(@"Command+Option+Control");
else if (flags == (NSShiftKeyMask|NSCommandKeyMask))
NSLog(@"Command+Shift ");
else if (flags == (NSControlKeyMask|NSCommandKeyMask))
NSLog(@"Command+Control");
else if (flags == (NSAlternateKeyMask|NSCommandKeyMask))
NSLog(@"Command+Option ");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1300 次 |
最近记录: |