當使用NSEvent flagsChanged和與各種KeyMasks進行AND操作時,如何測試min是一種獨特的方式? 目前,利用一系列的if else條件白衣模式:如何唯一捕獲修飾鍵?
if ((flags & someKeyMask) && (flags someOtherKeyMask))
這將匹配即使第三修改鍵是向下。 在if if條件中提前使用更長的一系列關鍵字掩碼使行爲按需要工作,但感覺不完整。是「只有這些修飾鍵,而不是其他」的好方法嗎?
這是一個更具體的例子,其中第一個匹配在其他之前。我想知道是否有一種方法可以爲每個說「只有這些修飾鍵」添加一些邏輯。
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 ");
}
因此,作爲由Ken Thomases提供了正確的模式我一直在尋找,就是: flags &= (<one or more masks bitwise OR'd together);
if (flags == (<one or more masks bitwise OR'd together)) { // do something }
這使獨家配套。
是的,這樣做不是問題。問題是如果if(else {(flags&(NSShiftKeyMask | NSControlKeyMask))在if-else系列之前出現,它甚至會與相同的修改鍵序列相匹配 – uchuugaka 2013-02-10 12:09:41
您應該只檢查所需的確切組合。如果你真的有兩個不相互排斥的條件,那麼你必須決定你想如何處理它(做兩個,只做A,只做B,不要做),並相應地編寫你的代碼。也許我不理解這聽起來像是一個老玩笑:「醫生,當我像這樣移動我的胳膊時,它會受傷。」「那麼,不要這樣做。」換句話說:所有的條件都應該是這樣的形式我已經顯示,沒有你寫的表格 – 2013-02-10 15:36:04
我已經用一個類似於你的問題的擴展例子更新了我的答案(儘管你的問題有一個多餘的例子) – 2013-02-10 16:45:34