2017-02-15 5 views

ответ

4

Вы можете использовать GlobalMonitorForEvents -

устанавливает монитор событий, который получает копию событий, опубликованных в других приложениях. События доставляются асинхронно приложение , и вы можете только наблюдать это событие

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

И добавить счетчик в обратном вызове для количества нажатий.

+0

** Особые соображения ** В OS X v 10.6, мониторы событий только в состоянии отслеживать следующие типы событий: NSLeftMouseDragged NSRightMouseDragged NSOtherMouseDragged NSLeftMouseUp NSRightMouseUp NSOtherMouseUp NSLeftMouseDown NSRightMouseDown NSOtherMouseDown NSMouseMoved NSFlagsChanged NSScrollWheel NSTabletPoint NSTabletProximity NSKeyDown (Key повторы определяются с помощью свойства isARepeat.) –

+0

у меня не было времени, чтобы попробовать еще. На основе доступной NSEventMask это кажется возможным. Я дам вам знать. https://developer.apple.com/reference/appkit/nseventmask – Jonathan

1

«Три пальца щетки по поверхности сенсорной панели в общем направлении является салфетка жест»

Вы можете использовать ниже фрагмент кода.

-(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 может быть решением вашей проблемы.

Сначала установите и добавить библиотеку в ваш проект: pod 'M5MultitouchSupport' (или visit projectsite here), а затем создать такой код (+ #import <M5MultitouchSupport.h>):

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

И выход будет:

"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" 

сейчас Я еще не тестирую его, но теоретически он должен работать.

EDIT:

Кроме того, чтобы получить другую информацию:

/** 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; 

Итак:

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