我有一个自定义视图子类NSView
,该子类将不同的图形对象绘制到其上下文中。该视图具有一种方法,该方法返回有关给定NSPoint
是否落入这些对象中一个或多个对象范围内的信息。目的是能够单击这些对象之一来选择它。我重写了视图的mouseUp方法,并将event.locationInWindow
传递给了我的getClickResult
方法。
我正在使用游乐场的liveView功能在游乐场中测试所有代码。
当我创建视图并将其直接传递给playgroundPage.current.liveView
时,一切都会按预期工作。
但是,当我创建自定义NSScrollView
并将对原始视图的引用作为scrollView的documentView
参数传递时,仅当我滚动到左下角并且滚动条位于显示结果被它们的宽度所取代。
因此,很明显,mouseUp事件的locationInWindow
似乎确实绑定到了窗口,而不是绑定到它正在响应的视图。
我发现了这个问题:
Converting an NSPoint from window coordinates to view coordinates
这是前快速时代的开始。使用XCodes自动完成功能,我得到以下快速代码:
var clickPosition = convert(event.locationInWindow, to: customView)
似乎最接近objC答案中的转换代码,但是它不起作用。
所以我的两个问题是:
如何获得documentView
中的点击位置?是否有预先配置的转换方法,或者我必须根据滚动位置手动计算偏移量?我可以从中读取此偏移量的scrollView's
属性是什么?
在哪里可以替代mouseUp方法?在我的NSView
子类中还是在我的NSScrollView
子类中?