swift - 调整视图大小时如何修复CoreGraphics虚线更改
问题描述
我有一个 NSView 的子类,它正在绘制一系列虚线。当我调整视图所在的窗口大小时,虚线会改变它们的模式。如何防止线条在窗口调整大小期间改变它们的图案?
在以下函数中绘制线条:
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)
}
调整窗口大小时,线条图案会发生变化 - 有时虚线看起来完全是实线:
解决方案
事实证明,我的lines
数组包含每条线的两个方向的线。这意味着对于每条线,它在两个方向上都画了一条虚线。这些虚线是重叠的,并且在调整大小时会出现同相和异相,从而导致这种行为。
推荐阅读
- git - 如何在不提交更改的情况下签出新分支?
- php - 如何cek数组php
- android - 未找到颤振 SDK。build.gradle 中 GradleException 的错误
- robotframework - for循环值的每次迭代都应该在for循环之外求和
- javascript - TippyJS-React:如何在右键单击时打开上下文菜单
- vim - 在 vim 中工作时,Home 和 End 键在 neovim 中不起作用
- python - 在 Python 中将范围变成列表
- php - PHP PDO 到 SQL 注入的安全性如何?
- javascript - 自动完成js - 列表的滚动条的列表向下箭头闪烁
- python - 使用 lambda 和 QTimer.singleShot 调用函数时出现问题