Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 调整窗口大小后OSX CustomView不起作用_Macos_Cocoa_Swift_Autolayout - Fatal编程技术网

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

Macos 调整窗口大小后OSX CustomView不起作用,macos,cocoa,swift,autolayout,Macos,Cocoa,Swift,Autolayout,我有一个显示NSBezierpath的简单视图。在路径内鼠标向下移动时,路径的填充颜色设置为黄色,视图将重新绘制。在路径外向下移动时,路径的填充颜色设置为蓝色,视图将重新绘制 在我的故事板中,我有一个单独的窗口控制器,其中有一个窗口内容序列到一个视图控制器。下面的视图customview类HeartView填充整个视图控制器 在用户垂直调整窗口大小之前,一切正常。之后,视图表现出奇怪的行为:mouseDown不再在路径内的任何地方都有效,回忆有时发生在路径外的mouseDown上,路径有时但不总

我有一个显示NSBezierpath的简单视图。在路径内鼠标向下移动时,路径的填充颜色设置为黄色,视图将重新绘制。在路径外向下移动时,路径的填充颜色设置为蓝色,视图将重新绘制

在我的故事板中,我有一个单独的窗口控制器,其中有一个窗口内容序列到一个视图控制器。下面的视图customview类HeartView填充整个视图控制器

在用户垂直调整窗口大小之前,一切正常。之后,视图表现出奇怪的行为:mouseDown不再在路径内的任何地方都有效,回忆有时发生在路径外的mouseDown上,路径有时但不总是完全填充。我认为superview中发生了一些事情,但我不知道发生了什么

    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
} 

将窗口坐标系转换为视图坐标系的步骤。现在,在任何窗口调整事件之后,情况都很好。

什么是怪异行为?鼠标向下移动不再在路径内的任何地方都有效,回忆有时发生在路径外的鼠标向下移动上,路径有时但不总是完全填满。已编辑问题以添加此信息