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 调整大小时持续更新视图。
我可能漏掉了一些明显的东西,但是...
我有一个简单的 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 调整大小时持续更新视图。