我有一个显示NSBezier路径的简单视图。在路径内的mouseDown上,路径的填充颜色设置为黄色并重新绘制视图。在路径外的mouseDown上,路径的填充颜色设置为蓝色,视图将重绘。
在我的故事板中,我有一个窗口控制器,窗口内容与视图控制器相对应。视图,customview类HeartView(下面)填充整个视图控制器。
一切正常,直到用户垂直调整窗口大小。在那之后,视图表现出奇怪的行为:mouseDown在路径内的任何地方都不再起作用,重新着色有时会发生在路径外的mouseDown上,并且路径有时(但不总是)不会完全填充。我觉得superview正在发生一些事情,但我不知道是什么。
preferredTestQuery
}
答案 0 :(得分:0)
我在Lucas Derraugh的鼠标事件视频(Cocoa Programming L27)中找到了答案。事实证明,我正在superview的坐标系中捕获mouseDown事件。在mouseDown事件中,我使用" locationInWindow,"这是造成这种奇怪行为的原因。我把方法改为:
override func mouseDown(theEvent: NSEvent) {
var viewPoint:NSPoint = self.convertPoint(theEvent.locationInWindow, fromView: nil)
mouseLocation.x = viewPoint.x
mouseLocation.y = viewPoint.y
self.needsDisplay = true
}
从窗口的坐标系转换为视图。在任何窗口调整大小事件之后,事情现在可以正常工作。