我有一个 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]
、normalizedPosition
、deviceSize
等(请参阅 Apple's documentation )。
关于macos - 为什么 NSView 在光标离开框架后继续接收触摸事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943809/