swift - 如何修复调整 View 大小时 CoreGraphics 虚线变化的问题

标签 swift macos core-graphics

我有一个 NSView 的子类,它正在绘制一系列虚线。当我调整 View 所在窗口的大小时,虚线会改变其模式。如何防止线条在窗口大小调整期间改变其图案?

这些线是在以下函数中绘制的:

func drawLines(in context: CGContext) {
    for line in lines {
        context.move(to: line.start)
        context.addLine(to: line.end)
        context.setLineDash(phase: 0, lengths: [10, 10])
        context.strokePath()
    }
}

这个函数是从draw(_:)调用的:

override func draw(_ dirtyRect: NSRect) {
    guard let context = NSGraphicsContext.current?.cgContext else { return }

    drawLines(in: context)
}

调整窗口大小时,线条图案会发生变化 - 有时虚线看起来完全是实线:

Image Example 1 Image Example 2

最佳答案

事实证明,我的 lines 数组包含每行双向的行。这意味着对于每条线,它都在两个方向上绘制一条虚线。这些虚线重叠,并且在调整大小时会同相和异相,从而导致此行为。

关于swift - 如何修复调整 View 大小时 CoreGraphics 虚线变化的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55790210/

相关文章:

iphone - 在 iOS 上,如何用轮廓填充路径? (或同时填充和描边路径)

swift - 使用 GameplayKit 在网格上查找路径

swift - 在 Sprite Kit 中跨屏幕移动 Sprite

cocoa - 独立的、可启动的 OS X 应用程序

macos - macOS 菜单项未调用 SwiftUI Toggle onChange

macos - 在WebView中注入(inject)NSView

core-graphics - 重新创建 Apple Watch 健身追踪器 ‘progress’ 栏 - CAShapeLayer 描边上的渐变

objective-c - 防止 UIImage 在 -drawInRect : is called 时调整大小

ios - 以编程方式展开 segue

ios - `Unable to dequeue a cell with identifier MyCell`