【问题标题】:redrawing NSView border during window resize has delay在窗口调整大小期间重绘 NSView 边框有延迟
【发布时间】:2020-04-09 19:59:36
【问题描述】:

我制作了一个简单的 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】:

    我使用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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-26
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多