내 Mac의 트랙 패드에서 (내 앱의 창뿐 아니라) 화면의 모든 부분을 제 앱의 창에 집중시키지 않으면 어떻게 감지 할 수 있습니까?)?MacOS 앱 창 밖에서도 3 개의 손가락 동작을 감지합니다.
감사합니다.
내 Mac의 트랙 패드에서 (내 앱의 창뿐 아니라) 화면의 모든 부분을 제 앱의 창에 집중시키지 않으면 어떻게 감지 할 수 있습니까?)?MacOS 앱 창 밖에서도 3 개의 손가락 동작을 감지합니다.
감사합니다.
당신은 GlobalMonitorForEvents을 사용할 수 있습니다 -
을 관찰하고 프레스의 수에 대한 콜백에서 카운터를 추가 할 수 있습니다.는 다른 응용 프로그램에 게시 된 이벤트의 복사본을 수신하는 이벤트 모니터를 설치합니다. 이벤트 앱 에 비동기 적으로 전달하고, 당신은 단지 이벤트를
https://developer.apple.com/reference/appkit/nsevent/1535472-addglobalmonitorforevents
당신은 코드 아래 사용할 수 있습니다
"일반적인 방향으로 트랙 패드의 표면을 가로 질러 닦고 3 개 개의 손가락은 슬쩍 제스처입니다."
-(NSSet *)touchesMatchingPhase:(NSTouchPhase)phase inView:(NSView *)view;
트랙 패드 환경 설정 패널에는 스크롤 동작에 대한 옵션이 있습니다. 두 손가락으로 스크롤보기의 내용보기를 움직입니다. 기술적으로 스크롤 제스처는 특정 제스처가 아니라 마우스 이벤트입니다. 제스처와 달리 스크롤 휠 이벤트 (즉, NSScrollWheel 유형의 이벤트)는 위상 속성과 momentumPhase 속성을 모두 가질 수 있습니다. momentumPhase 속성은 사용자가 더 이상 물리적으로 스크롤하지 않아도 하드웨어가 스크롤 휠 이벤트를 계속 발행하는 운동량 스크롤을 감지하는 데 도움이됩니다. Magic Mouse 및 Multi-Touch 트랙 패드와 같은 장치는 운동량 스크롤을 가능하게합니다.
당신은 더 많은 정보를 원하시면 볼 수 있습니다 HandlingTouchEvents
당신이 신뢰할 수있는 응용 프로그램을 활성화해야합니다 모니터 글로벌 이벤트를 허용합니다. 샌드 박스 환경에서는 작동하지 않으므로 앱 스토어에서는 작동하지 않습니다.
NSDictionary *options = @{(__bridge id) kAXTrustedCheckOptionPrompt : @YES};
AXIsProcessTrustedWithOptions((__bridge CFDictionaryRef) options);
테스트하려면 : 여기
BOOL trusted = AXIsProcessTrusted(); NSLog(@"Trusted Process: %d", trusted);
종합 insight.
그는'NSEvent' 모니터를 사용한다고 언급하지 않았습니다. 또한 설명서에는 '키 관련 이벤트'에 대한 권한이 필요하며 터치 또는 제스처는 필요하지 않다고 언급되어 있습니다. – Andy
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
** 특별 고려 사항 ** X의 V 10.6, 이벤트 모니터는 할 수 있습니다 다음 이벤트 유형을 모니터링하십시오. NSLeftMouseDragged NSRightMouseDragged NSOtherMouseDragged NSLeftMouseUp NSRightMouseUp NSOtherMouseUp NSLeftMouseDown NSRightMouseDown NSOtherMouseDown NSMouseMoved NSFlagsChanged NSScrollWheel NSTabletPoint NSTabletProximity NSKeyDown (키 반복이 isARepeat 속성을 사용하여 결정됩니다.) –
나는 아직 시도하는 시간이 없었다. 사용할 수있는 NSEventMask를 기반으로 가능한 것 같습니다. 알려 드리겠습니다. https://developer.apple.com/reference/appkit/nseventmask – Jonathan