2017-02-15 7 views

답변

4

당신은 GlobalMonitorForEvents을 사용할 수 있습니다 -

는 다른 응용 프로그램에 게시 된 이벤트의 복사본을 수신하는 이벤트 모니터를 설치합니다. 이벤트 앱 에 비동기 적으로 전달하고, 당신은 단지 이벤트를

https://developer.apple.com/reference/appkit/nsevent/1535472-addglobalmonitorforevents

을 관찰하고 프레스의 수에 대한 콜백에서 카운터를 추가 할 수 있습니다.

+0

** 특별 고려 사항 ** X의 V 10.6, 이벤트 모니터는 할 수 있습니다 다음 이벤트 유형을 모니터링하십시오. NSLeftMouseDragged NSRightMouseDragged NSOtherMouseDragged NSLeftMouseUp NSRightMouseUp NSOtherMouseUp NSLeftMouseDown NSRightMouseDown NSOtherMouseDown NSMouseMoved NSFlagsChanged NSScrollWheel NSTabletPoint NSTabletProximity NSKeyDown (키 반복이 isARepeat 속성을 사용하여 결정됩니다.) –

+0

나는 아직 시도하는 시간이 없었다. 사용할 수있는 NSEventMask를 기반으로 가능한 것 같습니다. 알려 드리겠습니다. https://developer.apple.com/reference/appkit/nseventmask – Jonathan

1

당신은 코드 아래 사용할 수 있습니다

"일반적인 방향으로 트랙 패드의 표면을 가로 질러 닦고 3 개 개의 손가락은 슬쩍 제스처입니다."

-(NSSet *)touchesMatchingPhase:(NSTouchPhase)phase inView:(NSView *)view; 

트랙 패드 환경 설정 패널에는 스크롤 동작에 대한 옵션이 있습니다. 두 손가락으로 스크롤보기의 내용보기를 움직입니다. 기술적으로 스크롤 제스처는 특정 제스처가 아니라 마우스 이벤트입니다. 제스처와 달리 스크롤 휠 이벤트 (즉, NSScrollWheel 유형의 이벤트)는 위상 속성과 momentumPhase 속성을 모두 가질 수 있습니다. momentumPhase 속성은 사용자가 더 이상 물리적으로 스크롤하지 않아도 하드웨어가 스크롤 휠 이벤트를 계속 발행하는 운동량 스크롤을 감지하는 데 도움이됩니다. Magic Mouse 및 Multi-Touch 트랙 패드와 같은 장치는 운동량 스크롤을 가능하게합니다.

당신은 더 많은 정보를 원하시면 볼 수 있습니다 HandlingTouchEvents

1

당신이 신뢰할 수있는 응용 프로그램을 활성화해야합니다 모니터 글로벌 이벤트를 허용합니다. 샌드 박스 환경에서는 작동하지 않으므로 앱 스토어에서는 작동하지 않습니다.

NSDictionary *options = @{(__bridge id) kAXTrustedCheckOptionPrompt : @YES}; 
AXIsProcessTrustedWithOptions((__bridge CFDictionaryRef) options); 

테스트하려면 : 여기

BOOL trusted = AXIsProcessTrusted(); NSLog(@"Trusted Process: %d", trusted);

종합 insight.

+0

그는'NSEvent' 모니터를 사용한다고 언급하지 않았습니다. 또한 설명서에는 '키 관련 이벤트'에 대한 권한이 필요하며 터치 또는 제스처는 필요하지 않다고 언급되어 있습니다. – Andy

2

M5MultitouchSupport은 문제를 해결할 수 있습니다.

[M5MultitouchManager.sharedManager addListenerWithCallback:^(M5MultitouchEvent *event) { 
    NSLog(event.description); 
}]; 

그리고 출력 될 것입니다 :

먼저 설치하고 프로젝트에 라이브러리를 추가 : pod 'M5MultitouchSupport' (또는 visit projectsite here을), 다음과 같은 코드 (+ #import <M5MultitouchSupport.h>)를 만들

"ID: 3, State: 4 (Touching), Position: [0.251363, 0.475246], Velocity: [0.009912, -0.003619], Minor Axis: 8.160000, Major Axis: 9.920000, Angle: 1.911052, Size: 0.750000", 
"ID: 6, State: 4 (Touching), Position: [0.618595, 0.839751], Velocity: [-0.007434, -0.014476], Minor Axis: 8.230000, Major Axis: 9.220000, Angle: 1.570796, Size: 0.625000", 
"ID: 8, State: 4 (Touching), Position: [0.410051, 0.792415], Velocity: [0.008673, 0.018095], Minor Axis: 7.660000, Major Axis: 8.890000, Angle: 1.570796, Size: 0.628906" 

지금 아직 테스트하지는 않지만 이론적으로는 작동해야합니다.

는 편집 :

또한

다른 정보를 얻을 : 그래서

/** Identifier of touch, persistent/applicable across events. */ 
@property (assign, readonly) int identifier; 

/** Current state of touch. 0 is not touching, anything else is some kind of touching. */ 
@property (assign, readonly) M5MultitouchTouchState state; 

/** Coordinates of touch (each value 0 -> 1, so basically percent of touch surface). */ 
@property (assign, readonly) float posX, posY; 

/** Coordinates of touch (each value 0 -> 1, so basically percent of touch surface). */ 
@property (assign, readonly) float velX, velY; 

/** Minor and major axis of touch. */ 
@property (assign, readonly) float minorAxis, majorAxis; 

/** Angle of touch (angle of finger tip from north). */ 
@property (assign, readonly) float angle; 

/** Size of touch (finger tip surface area touching). */ 
@property (assign, readonly) float size; 

: OS에서

NSLog(event.size); // Get size 
NSLog(event.angle); // Get angle 
NSLog(event.state); // Get state (4 = touching) 
NSLog(event.posX); // get position x or y