如何解决为什么在调整窗口大小或移动拖动到辅助显示监视器时自定义 NSView 会重绘?
我最近开始向我编写的 MacOS 应用程序添加图形图表。第一个图表很棒,我添加了第二个图表,在那里我遇到了我不/不理解的代码运行的基本方式。我遇到这个的唯一原因是因为在我的第二张图表中,我使用随机在有限区域内绘制了一些气泡。它工作得很好,但是当我稍微调整视图窗口的大小时,图表重新绘制了所有内容,并且由于我使用的是随机的,因此第一组气泡保留在屏幕中,第二组气泡被添加到屏幕中。所以我做了一个简单的例子来说明。
class GraphView: NSView {
var dcnt = 0
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
dcnt+=1
print(dcnt)
let path = NSBezierPath(rect: self.bounds)
var rec = NSRect()
var circ = NSBezierPath()
NSColor.lightGray.setFill()
path.fill()
rec = NSRect(x:Int.random(in: 100...900),y:Int.random(in: 70...560),width:50,height:50)
NSColor.red.setFill()
circ = NSBezierPath(ovalIn: rec)
circ.fill()
circ.stroke()
}
}
这是从一个调用 GraphView 的简单 ViewController 运行的。我添加了一个计数器来打印出来,看看发生了什么。此外,如果我将图表/视图窗口拖到第二个监视器上,它也会强制重绘。
我如何阻止这种情况发生。我想绘制图表,就是这样。没有单击、拖动、调整大小(我已禁用调整窗口大小)应重绘任何内容。
以下是我将图表拖动到辅助监视器时发生的情况的示例...
解决方法
当窗口调整大小或移动(拖动)到辅助显示(监视器)时,为什么自定义 NSView 会重绘?
窗口大小调整会导致视图大小调整。辅助显示器可能具有不同的分辨率。
我如何阻止这种情况发生。
不能,draw
被多次调用。
我想绘制图表,仅此而已。
创建图表的 NSImage
并将其显示在 NSimageView
中。
第一组气泡留在屏幕上,第二组气泡被添加到屏幕上
在创建视图时计算一次圆的坐标或矩形,这样 draw
将始终绘制相同的圆。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。