Как я могу обнаружить жест 3 пальцев на моем максовом трекдере везде на экране (не только в окне моего приложения) постоянно (без фокусировки на окне моего приложения)?Обнаружить жест 3 пальцев руки даже вне окна приложения MacOS постоянно
Спасибо!
Как я могу обнаружить жест 3 пальцев на моем максовом трекдере везде на экране (не только в окне моего приложения) постоянно (без фокусировки на окне моего приложения)?Обнаружить жест 3 пальцев руки даже вне окна приложения MacOS постоянно
Спасибо!
Вы можете использовать GlobalMonitorForEvents -
устанавливает монитор событий, который получает копию событий, опубликованных в других приложениях. События доставляются асинхронно приложение , и вы можете только наблюдать это событие
https://developer.apple.com/reference/appkit/nsevent/1535472-addglobalmonitorforevents
И добавить счетчик в обратном вызове для количества нажатий.
«Три пальца щетки по поверхности сенсорной панели в общем направлении является салфетка жест»
Вы можете использовать ниже фрагмент кода.
-(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 может быть решением вашей проблемы.
Сначала установите и добавить библиотеку в ваш проект: 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
** Особые соображения ** В OS X v 10.6, мониторы событий только в состоянии отслеживать следующие типы событий: NSLeftMouseDragged NSRightMouseDragged NSOtherMouseDragged NSLeftMouseUp NSRightMouseUp NSOtherMouseUp NSLeftMouseDown NSRightMouseDown NSOtherMouseDown NSMouseMoved NSFlagsChanged NSScrollWheel NSTabletPoint NSTabletProximity NSKeyDown (Key повторы определяются с помощью свойства isARepeat.) –
у меня не было времени, чтобы попробовать еще. На основе доступной NSEventMask это кажется возможным. Я дам вам знать. https://developer.apple.com/reference/appkit/nseventmask – Jonathan