2016-07-09 2 views
0

사용자가 왼쪽 마우스로 텍스트를 선택하고 마우스 왼쪽 버튼을 누른 상태에서 오른쪽 마우스 btn을 클릭하면 호출 동작을 수행하려고합니다.NSTextView에서 왼쪽 마우스를 드래그하는 동안 오른쪽 마우스를 아래로 내리고 다른 마우스를 아래로 감지하는 방법은 무엇입니까?

저는 현재 rightMouseDownotherMouseDown으로 대체되었지만 왼쪽 마우스를 들고있는 동안에는 호출되지 않습니다. btn. 그것을 어떻게 성취 할 수 있습니까?

+0

마우스 왼쪽 버튼을 누른 상태에서 사용자가 마우스 오른쪽 버튼을 클릭하는 이유는 무엇입니까? 대부분의 Mac 하드웨어에서는 불가능합니다. 사용자가 텍스트를 선택하고 왼쪽 마우스를 누른 다음 마우스 오른쪽 버튼을 다시 놓으면 충분하지 않습니까? – mangerlahn

답변

1

마우스 왼쪽 버튼을 누른 상태에서 사용자가 마우스 오른쪽 버튼을 클릭하는 이유는 무엇입니까? 대부분의 Mac 하드웨어에서는 불가능합니다. 사용자가 텍스트를 선택하면 왼쪽 마우스 &을 놓은 다음 마우스 오른쪽 버튼을 다시 클릭하면 충분하지 않습니까?

그러나 경우에 당신이 정말 이러한 기능을 필요

: 나는 아래로 동시에 왼쪽 호출 & 우측 마우스가 아닌 하드웨어를 가지고 나는,이 테스트를하지 않은,하지만 작동합니다.

레벨이 더 깊어지고 CGEvent 개체로 작업 할 수 있습니다. 작동 방식은 다음과 같습니다.

응답 할 이벤트를 정의하는 비트 마스크를 생성하십시오.

let eventMask = eventMask | (1 << CGEventType.leftMouseDown.rawValue) 
          | (1 << CGEventType.leftMouseUp.rawValue) 
          | (1 << CGEventType.rightMouseDown.rawValue) 
          | (1 << CGEventType.rightMouseUp.rawValue) 
          | (1 << CGEventType.otherMouseDown.rawValue) 
          | (1 << CGEventType.otherMouseUp.rawValue) 

self.eventTap = CGEvent.tapCreate(tap: .cghidEventTap, place: .headInsertEventTap, options: .defaultTap, eventsOfInterest: CGEventMask(eventMask), callback: { (proxy: CGEventTapProxy, type: CGEventType, event: CGEvent, userInfo: UnsafeMutablePointer<Void>?) -> Unmanaged<CGEvent>? in 
     // mySelf is self, if you need to refer to objects in this class 
     let mySelf = Unmanaged<MyClass>.fromOpaque(userInfo!).takeUnretainedValue() 

     if type == .leftMouseDown || type == .leftMouseUp { 
      // Left mouse down etc.. 

     } 

     return Unmanaged.passUnretained(event) 
    }, userInfo: UnsafeMutablePointer(Unmanaged.passUnretained(self).toOpaque())) 

그리고 마지막으로 CFMachPort을 runLoop에 추가해야합니다.

let runloopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0) 
CFRunLoopAddSource(CFRunLoopGetCurrent(), runloopSource, CFRunLoopMode.commonModes) 

그렇습니다. 그것을 시도해보십시오, 그것이 효과가 있다면 나는 호기심이 많습니다.

관련 문제