objective-c - 贝塞尔路径解决性能问题

标签 objective-c cocoa performance macos bezier

我的代码如下 -

[[NSColor whiteColor] set];
// `path' is a bezier path with more than 1000 points in it
[path setLineWidth:2];
[path setLineJoinStyle:NSRoundLineJoinStyle];
[path stroke];
// some other stuff...

在 Instruments 中运行时间分析工具,它告诉我我的应用程序花费了 93.5% 的时间来执行最后一行[路径笔画],而 Quartz Debugger 告诉我我的应用程序仅以更少的时间运行超过 10 fps(另一个 View 在其之上改变位置总是导致更新)。

我正在寻找提高抚摸贝塞尔曲线路径性能的方法,有时超过 1000 个点的路径会以 >60fps 快速绘制,但是在某些极端情况下,即使点数量相同,也许如果点彼此距离太远(或太密集?),性能变得非常缓慢。

我不知道我能对此做些什么。我认为将 View 缓存为位图代表很有帮助,但它对实时调整大小并没有真正的帮助。

编辑:注释掉行 [path setLineWidth:2]; 当然有帮助,但路径看起来真的太“细”了。

最佳答案

您可以使用 setFlatness: 方法调整曲线的平坦度,较高的值会提高渲染速度,但会牺牲准确性。例如,您应该在实时调整大小期间使用更高的值。

关于objective-c - 贝塞尔路径解决性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433522/

相关文章:

objective-c - 执行 IBAction 时如何隐藏按钮?

ios - 为什么第一次加载不正确但刷新后正确加载?

python - 在 Python 中排序的最快方法(没有 cython)

javascript - 前端资源优化 : Requests vs caching

C#快速crc32计算:

objective-c - 在 Objective-c 中设置打印纸张尺寸

objective-c - 有没有办法从字符串反射调用 Objective-C 中的函数?

objective-c - 如何从旨在支持 COCOA 下构建的 GUI 的主 NSWindow 控制位于专用 NSWindow 中的 NSView?

swift - 在 NSTableView 中编辑 NSTextField 时按下 Enter 时选择下一行

macos - 防止网络设置询问密码