我可能会错过一些明显的东西,但是......
我有一个简单的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
。因此,当我启动我的应用程序时,它将按照预期很好地绘制框架:
但缩小时
看起来视图没有被删除,并且在窗口上留下了伪影。 这可能是微不足道的,但我现在失明了。
答案 0 :(得分:0)
尝试使用field.superview?.needsDisplay = true
重绘超级视图并清除该可视化工件。
根据您的目标,您可能希望使用windowDidResize(notification: NSNotification)
而不是在调整窗口大小时不断更新视图。