Macos 为什么NSView在光标离开其框架后继续接收触摸事件?

Macos 为什么NSView在光标离开其框架后继续接收触摸事件?,macos,cocoa,Macos,Cocoa,我有一个带有[self-setAcceptsTouchEvents:YES]的NSView 光标离开NSView框架后,此方法将继续被调用,直到我单击/开始一个新手势,我才真正理解它何时停止 -(void)touchesMovedWithEvent:(NSEvent *)theEvent { [self doStuffs:theEvent]; } 使用其他windows坐标系表示的坐标 有没有办法防止这种情况发生,或者将坐标转换回视图坐标系?NSResponder的touchsmove

我有一个带有
[self-setAcceptsTouchEvents:YES]的NSView

光标离开NSView框架后,此方法将继续被调用,直到我单击/开始一个新手势,我才真正理解它何时停止

-(void)touchesMovedWithEvent:(NSEvent *)theEvent {
    [self doStuffs:theEvent];
}
使用其他windows坐标系表示的坐标


有没有办法防止这种情况发生,或者将坐标转换回视图坐标系?

NSResponder的
touchsmovedwithevent
用于在视图中开始直到结束的触摸事件(无论是在您自己的视图中还是在其他位置)

事件位置以窗口坐标表示。转换到视图的坐标系很容易:

- (void)touchesMovedWithEvent:(NSEvent *)event
{
    NSPoint locInWindow;
    NSPoint locInView;

    locInWindow = [event locationInWindow];
    locInView = [self convertPoint:locInWindow fromView:nil];

    NSLog(@"Location in window: %@", NSStringFromPoint(locInWindow));
    NSLog(@"Location in view: %@", NSStringFromPoint(locInView));
}

如果您想为自己的多点触控手势处理原始触控,这可能是不够的信息。您需要使用
[event touchesMatchingPhase:NSTouchPhaseMoved inView:self]
normalizedPosition
deviceSize
等(请参阅)。

NSEvent是否包含指向生成事件的窗口的指针?所有非周期性事件都包含指向与事件相关联的窗口的指针([NSEvent window])。如果要检查当前事件的位置是否在窗口(或视图)的内部或外部,可以将NSPointInRect()与事件的位置一起使用。我实际上指的是NSView而不是window,但窗口指针肯定足够了。