我只是尝试在窗口中全局接收触摸事件,而不仅仅是在视图中。
在我的代码中,您可以看到下面,我将获得魔术触控板中触摸的绝对位置。只要光标位于视图内(红色NSRect),它就可以正常工作,但是如何在此视图之外接收触摸。
我在许多社区寻找解决方案,并在苹果中心寻找解决方案,但一无所获。
我认为问题是这样的:NSSet *touches = [ev touchesMatchingPhase:NSTouchPhaseTouching inView:nil];
NSEvent中没有一个方法可以获得每一次触摸吗?
希望有人能帮助我。
这是我的实施:
@implementation MyView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
[self setAcceptsTouchEvents:YES];
myColor = [NSColor colorWithDeviceRed:1.0 green:0 blue:0 alpha:0.5];
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
NSRect bounds = [self bounds];
[myColor set];
[NSBezierPath fillRect:bounds];
}
- (void)touchesBeganWithEvent:(NSEvent *)ev {
NSSet *touches = [ev touchesMatchingPhase:NSTouchPhaseTouching inView:nil];
for (NSTouch *touch in touches) {
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);
}
}
答案 0 :(得分:0)
使用touchesMatchingPhase:inView:
为nil
调用最后一个参数(您正在进行的操作)将获得所有接触。问题是touchesBeganWithEvent:
根本不会触发不在触摸区域内的控件。
您可以将视图作为第一个响应者,它将首先向其发送所有事件。请参阅becomeFirstResponder和Responder object