在调整窗口大小时重新绘制NSView边框有延迟

问题描述 投票:1回答:1

我制作了一个简单的headerView,它在主NSView上方绘制了灰色底线,就像Xcode中的标题一样。代码如下所示:

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))
    }
}

线条绘制,但是当我调整窗口大小时,重新绘制线条时会有一个小的延迟。因此,如果我将窗口的右侧向右拉,您可以在右侧的行中短暂看到一个间隙。

我也尝试添加:

self.layerContentsRedrawPolicy = .duringViewResize

但是那没什么不同。

我如何确保在调整窗口大小时不断更新行?

swift xcode macos calayer
1个回答
0
投票

我使用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()
}
© www.soinside.com 2019 - 2024. All rights reserved.