窗口大小调整后NSView与NSBezierPath不更新

时间:2015-01-30 18:22:10

标签: swift nsview window-resize

我可能会错过一些明显的东西,但是......

我有一个简单的NSView:

class TestView : NSView {

  override func drawRect(dirtyRect: NSRect) {
    let path = NSBezierPath()
    path.moveToPoint(NSPoint(x: 0 ,y: 0))
    path.lineToPoint(NSPoint(x: frame.size.width, y: 0))
    path.lineToPoint(NSPoint(x: frame.size.width, y: frame.size.height))
    path.lineToPoint(NSPoint(x: 0 ,y: frame.size.height))
    path.lineToPoint(NSPoint(x: 0 ,y: 0))
    path.lineWidth = 1
    path.stroke()
  }
}

这是单独放在窗口中。窗口控制器有

func windowDidEndLiveResize(notification: NSNotification) {
  var frame = textFrame
  frame.size.height = window!.frame.size.height - 60
  frame.size.width = window!.frame.size.width - 40
  field.frame = frame
  field.needsDisplay = true
}

其中frame是窗口加载时框架的大小,field是我的TestView。因此,当我启动我的应用程序时,它将按照预期很好地绘制框架:

enter image description here

但缩小时

enter image description here

看起来视图没有被删除,并且在窗口上留下了伪影。 这可能是微不足道的,但我现在失明了。

1 个答案:

答案 0 :(得分:0)

尝试使用field.superview?.needsDisplay = true重绘超级视图并清除该可视化工件。

根据您的目标,您可能希望使用windowDidResize(notification: NSNotification)而不是在调整窗口大小时不断更新视图。