Macos 调整窗口大小后OSX CustomView不起作用
我有一个显示NSBezierpath的简单视图。在路径内鼠标向下移动时,路径的填充颜色设置为黄色,视图将重新绘制。在路径外向下移动时,路径的填充颜色设置为蓝色,视图将重新绘制 在我的故事板中,我有一个单独的窗口控制器,其中有一个窗口内容序列到一个视图控制器。下面的视图customview类HeartView填充整个视图控制器 在用户垂直调整窗口大小之前,一切正常。之后,视图表现出奇怪的行为:mouseDown不再在路径内的任何地方都有效,回忆有时发生在路径外的mouseDown上,路径有时但不总是完全填充。我认为superview中发生了一些事情,但我不知道发生了什么Macos 调整窗口大小后OSX CustomView不起作用,macos,cocoa,swift,autolayout,Macos,Cocoa,Swift,Autolayout,我有一个显示NSBezierpath的简单视图。在路径内鼠标向下移动时,路径的填充颜色设置为黄色,视图将重新绘制。在路径外向下移动时,路径的填充颜色设置为蓝色,视图将重新绘制 在我的故事板中,我有一个单独的窗口控制器,其中有一个窗口内容序列到一个视图控制器。下面的视图customview类HeartView填充整个视图控制器 在用户垂直调整窗口大小之前,一切正常。之后,视图表现出奇怪的行为:mouseDown不再在路径内的任何地方都有效,回忆有时发生在路径外的mouseDown上,路径有时但不总
import Cocoa
class HeartView: NSView {
var mouseLocation : NSPoint = NSZeroPoint
func drawObject(){
//Create an empty Bezier path
let aBezier : NSBezierPath = NSBezierPath()
aBezier.moveToPoint(CGPoint(x: 176.95,y: 44.90))
aBezier.curveToPoint(CGPoint(x: 166.71,y: 145.89),
controlPoint1: CGPoint(x: 76.63,y: 76.78),
controlPoint2: CGPoint(x: 82.59,y: 206.70))
aBezier.curveToPoint(CGPoint(x: 176.95,y: 44.90),
controlPoint1: CGPoint(x: 237.55,y: 224.76),
controlPoint2: CGPoint(x: 276.83,y: 95.98))
aBezier.closePath()
if (aBezier.containsPoint(NSMakePoint(mouseLocation.x, mouseLocation.y))){
NSColor.yellowColor().setFill()
NSColor.greenColor().setStroke()
} else {
NSColor.blueColor().setFill()
NSColor.orangeColor().setStroke()
}
aBezier.fill()
aBezier.lineWidth = 2.0
aBezier.stroke()
}
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
drawObject()
}
override func mouseDown(theEvent: NSEvent) {
mouseLocation.x = theEvent.locationInWindow.x
mouseLocation.y = theEvent.locationInWindow.y
self.setNeedsDisplayInRect(self.frame)
}
}我在卢卡斯·德劳关于鼠标事件的视频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
}
将窗口坐标系转换为视图坐标系的步骤。现在,在任何窗口调整事件之后,情况都很好。什么是怪异行为?鼠标向下移动不再在路径内的任何地方都有效,回忆有时发生在路径外的鼠标向下移动上,路径有时但不总是完全填满。已编辑问题以添加此信息