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

标签 macos cocoa

我有一个 NSView 与 [self setAcceptsTouchEvents:YES];

光标离开 NSView 框架后,这个方法会继续被调用,直到我单击/开始一个新的手势,我不太明白它什么时候停止。

-(void)touchesMovedWithEvent:(NSEvent *)theEvent {
    [self doStuffs:theEvent];
}

使用其他 Windows 坐标系表示的坐标。

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

最佳答案

NSResponder 的 touchesMovedWithEvent 会在您的 View 中开始的触摸事件被调用,直到它们结束(无论是在您自己的 View 中还是其他地方)。

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

- (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 attemptsMatchingPhase:NSTouchPhaseMoved inView:self]normalizedPositiondeviceSize 等(请参阅 Apple's documentation )。

关于macos - 为什么 NSView 在光标离开框架后继续接收触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943809/

相关文章:

macos - DTrace END 探针从不触发

macos - Mac Lion OS的右键单击快捷方式?

macos - 既然 ColorSync Manager API 中的所有内容均已弃用,我如何查找显示配置文件

cocoa - 通过类别添加 BOOL 属性

macos - Mac OS X 上的 Tomcat 启动脚本权限

objective-c - 内联编辑 `NSOutlineView` 的标题

cocoa - 如何将托管 NSView 的图层渲染到文件

objective-c - 自 OSX 10.8 起屏幕保护程序崩溃

swift - 带有编码 anchor 的 NSViewController Storyboard可折叠窗口

cocoa - RestKit 2.0 : Mapping - second entitiy nil when not unique