window 调整大小后 NSView with NSBezierPath 未更新

NSView with NSBezierPath not updating after 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()
  }
}

这是唯一的 window。 window 控制器有

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 是 window 加载时帧的大小,field 是我的 TestView。因此,当我启动我的应用程序时,它会按预期很好地绘制框架:

但缩小时

看来视图没有被删除,它在 window 上留下了人工痕迹。 这可能是微不足道的,但我目前是盲人。

尝试使用 field.superview?.needsDisplay = true.

让超级视图重绘并清除视觉工件

根据您的目标,您可能希望使用 windowDidResize(notification: NSNotification),它会在 window 调整大小时持续更新视图。