Как я могу обнаружить жест 3 пальцев на моем максовом трекдере на экране (не только в моем окне приложения) постоянно (без фокуса на моем окне приложения)?
Спасибо!
Как я могу обнаружить жест 3 пальцев на моем максовом трекдере на экране (не только в моем окне приложения) постоянно (без фокуса на моем окне приложения)?
Спасибо!
Вы можете использовать GlobalMonitorForEvents -
устанавливает монитор событий, который получает копии событий, отправленных в других приложений. События передаются асинхронно в ваше приложение и вы можете наблюдать за событием
https://developer.apple.com/reference/appkit/nsevent/1535472-addglobalmonitorforevents
И добавьте счетчик в обратном вызове для числа нажатий.
M5MultitouchSupport может быть решением вашей проблемы.
Сначала установите и добавьте библиотеку в свой проект: pod 'M5MultitouchSupport'
(или посетите сайт проекта здесь), а затем создайте такой код (+ #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
"Три пальца, чистящие по поверхности трекпада в общем направлении, являются жестом салфетки"
Вы можете использовать ниже фрагмент кода.
-(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);
Вот всеобъемлющая проницательность.