在Mac OS X下知道手指在触控板中的位置

AP.*_*AP. 11 macos cocoa trackpad objective-c

我正在开发一个Mac应用程序,我想知道触摸时手指在触控板中的位置.

这是可能的,如果是的话,怎么样?

Jer*_*man 12

您的视图需要设置为接受touches([self setAcceptsTouchEvents:YES]).当你得到类似的触摸事件时-touchesBeganWithEvent:,你可以通过查看它的normalizedPosition(范围是[0.0,1.0] x [0.0,1.0])根据它deviceSize的大点(每英寸72 bp)找出手指所在的位置.触控板的左下角被视为零原点.

所以,例如:

- (id)initWithFrame:(NSRect)frameRect {
   self = [super initWithFrame:frameRect];
   if (!self) return nil;

   /* You need to set this to receive any touch event messages. */
   [self setAcceptsTouchEvents:YES];

   /* You only need to set this if you actually want resting touches.
    * If you don't, a touch will "end" when it starts resting and
    * "begin" again if it starts moving again. */
   [self setWantsRestingTouches:YES]
   return self;
}

/* One of many touch event handling methods. */
- (void)touchesBeganWithEvent:(NSEvent *)ev {
   NSSet *touches = [ev touchesMatchingPhase:NSTouchPhaseBegan inView:self];

   for (NSTouch *touch in touches) {
      /* Once you have a touch, getting the position is dead simple. */
      NSPoint fraction = touch.normalizedPosition;
      NSSize whole = touch.deviceSize;
      NSPoint wholeInches = {whole.width / 72.0, whole.height / 72.0};
      NSPoint pos = wholeInches;
      pos.x *= fraction.x;
      pos.y *= fraction.y;
      NSLog(@"%s: Finger is touching %g inches right and %g inches up "
            @"from lower left corner of trackpad.", __func__, pos.x, pos.y);
   }
}
Run Code Online (Sandbox Code Playgroud)

(将此代码视为一个例子,而不是经过验证的真实的战争样本代码;我只是将其直接写入评论框.)


Pot*_*ter 1

我不知道是否有 ObjC 接口,但您可能会发现 C HID 类设备接口很有趣。