gpt4 book ai didi

macos - NSView中的drawRect高效绘图

转载 作者:行者123 更新时间:2023-12-03 16:54:41 27 4
gpt4 key购买 nike

我正在编写一个应用程序,我正在其中绘制 NSView 。在 mouseDown 中,我将位置保存在数据模型中,然后在 View 的 drawRect 方法中在该位置绘制图形。一切正常。

在我的mouseDown结束时,我调用[self setNeedsDisplay:YES];来强制重绘。唯一的问题是,dirtyRect 始终是 View 的完整大小。我想尽可能地优化它,这样我就不会只为几个更改的像素重新绘制整个窗口。

所以现在我改为调用 [self drawRect:...] 并指定矩形。

现在,在我的 drawRect 中,我正在比较每个图形,看看它是否落在 dirtyRect 中。看起来我已经把绘图工作换成了边界检查工作。我不确定我是否提高或降低了效率。

那么标准做法是什么?重绘 View 中的所有内容并忽略 dirtyRect 是很常见的吗? 有没有一个很好的函数可以用来测试我的对象是否在 dirtyRect 中?

最佳答案

如果您尝试绘制到屏幕上,则永远不应该自己调用-drawRect:。让 AppKit 为您调用。您应该做的是在 -mouseDown: 末尾调用 -setNeedsDisplayInRect:

然后,在-drawRect:中,仅绘制dirtyRect中包含的内容。您可以使用 NSPointInRect() 测试某个点是否位于 dirtyRect 内部。还有许多其他有用的函数可用于使用 NSRect。请参阅 the point functions 的文档和the rectangle functions .

关于macos - NSView中的drawRect高效绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15166509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com