在 window 调整大小时重绘 NSView 边框有延迟
redrawing NSView border during window resize has delay
我制作了一个简单的 headerView,它在主 NSView 上方绘制了一条灰色底线,就像 Xcode 中的 header。代码如下:
import Cocoa
class HeaderView: NSView {
var border = CALayer()
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.white.cgColor
border.backgroundColor = NSColor.quaternaryLabelColor.cgColor
layer?.addSublayer(border)
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
border.frame = CGRect(x: 0.0, y: 0.0, width: frame.width, height: CGFloat(1.0))
}
}
线条绘制,但是当我调整 window 的大小时,重新绘制线条时会有一个小的延迟。因此,如果我将 window 的右侧向右拉,您可以短暂地看到右侧的线中有一个缺口。
我也试过添加:
self.layerContentsRedrawPolicy = .duringViewResize
但这并没有什么不同。
如何确保在调整 window 大小时不断更新该行?
我使用 NSBezierPath
:
修复了它
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let path = NSBezierPath()
path.move(to: NSPoint(x: 0.0, y: 0.0))
path.line(to: NSPoint(x: frame.width, y: 0.0))
NSColor.quaternaryLabelColor.setStroke()
path.stroke()
}
我制作了一个简单的 headerView,它在主 NSView 上方绘制了一条灰色底线,就像 Xcode 中的 header。代码如下:
import Cocoa
class HeaderView: NSView {
var border = CALayer()
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
self.wantsLayer = true
self.layer?.backgroundColor = NSColor.white.cgColor
border.backgroundColor = NSColor.quaternaryLabelColor.cgColor
layer?.addSublayer(border)
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
border.frame = CGRect(x: 0.0, y: 0.0, width: frame.width, height: CGFloat(1.0))
}
}
线条绘制,但是当我调整 window 的大小时,重新绘制线条时会有一个小的延迟。因此,如果我将 window 的右侧向右拉,您可以短暂地看到右侧的线中有一个缺口。
我也试过添加:
self.layerContentsRedrawPolicy = .duringViewResize
但这并没有什么不同。
如何确保在调整 window 大小时不断更新该行?
我使用 NSBezierPath
:
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
let path = NSBezierPath()
path.move(to: NSPoint(x: 0.0, y: 0.0))
path.line(to: NSPoint(x: frame.width, y: 0.0))
NSColor.quaternaryLabelColor.setStroke()
path.stroke()
}