窗口调整大小后,OSX CustomView不起作用

时间:2015-04-25 13:55:11

标签: macos cocoa swift autolayout

我有一个显示NSBezier路径的简单视图。在路径内的mouseDown上,路径的填充颜色设置为黄色并重新绘制视图。在路径外的mouseDown上,路径的填充颜色设置为蓝色,视图将重绘。

在我的故事板中,我有一个窗口控制器,窗口内容与视图控制器相对应。视图,customview类HeartView(下面)填充整个视图控制器。

一切正常,直到用户垂直调整窗口大小。在那之后,视图表现出奇怪的行为:mouseDown在路径内的任何地方都不再起作用,重新着色有时会发生在路径外的mouseDown上,并且路径有时(但不总是)不会完全填充。我觉得superview正在发生一些事情,但我不知道是什么。

preferredTestQuery

}

1 个答案:

答案 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
} 

从窗口的坐标系转换为视图。在任何窗口调整大小事件之后,事情现在可以正常工作。