gpt4 book ai didi

cocoa-touch - 增量添加到 UIView

转载 作者:行者123 更新时间:2023-12-04 12:56:09 28 4
gpt4 key购买 nike

在我的 iOS 应用程序中,我创建了一个 View ,该 View 使用 UIBezierPath 呈现用手指绘制的路径。实时绘制。不幸的是,我遇到了性能问题,因为路径变长(数百个顶点),每次刷新 View 时绘制整个路径变得不切实际。

我尝试将路径分成许多不同的段,这允许我只绘制在 drawRect: 中传递给我的矩形中的段。这有很大帮助,但绘图仍然很慢;当部分被添加到已经包含部分路径的屏幕区域中的路径时,许多段被不必要地重绘。

我没有从 View 中删除任何内容,所以我尝试启用 clearsContextBeforeDrawing并且每次只绘制最新的片段drawRect:被调用,但似乎网上有大量轶事证据表明该属性没有任何作用,而且我似乎根本无法使其工作。

加快绘图速度的最佳方法是什么?

从我读过的内容来看,我最好的选择是绘制到(屏幕外)位图上下文,这样我就可以一点一点地添加并将其复制到屏幕上显示的图形上下文中,但我也读到这通常是分配上下文和将图像渲染到屏幕所需的 RGBA 到 RGB 转换都很慢。

看起来我可以做一些涉及 CALayer 的事情(无论有没有屏幕外缓冲区)——我不清楚在图层上绘图是如何工作的,以及它是否会规避我所看到的任何问题。 contents属性接受 CGImageRef ;我可以做一个 CGImage然后在不重绘所有内容的情况下逐步更新它?另外,是否可以在不重绘整个内容的情况下添加 CALayer 的内容?

任何见解将不胜感激。

编辑:对于赏金,请提供一个示例,说明如何正确初始化图像缓冲区、在其上绘制三次贝塞尔路径并将其适本地复制到屏幕上。另外请记下为什么要使用您的方法-我不知道是否使用CGBitmapContextCreate是最好的方法,或者如果我应该使用其他东西。

最佳答案

BezierPaths 很好,因为它们是矢量,无论您的 View 分辨率如何,它们看起来都不错。但是,如果您不需要调整 View 大小,则无需每次都计算所有内容。只需计算最后一条弧线/线并将其绘制到前一个(屏幕外)缓冲区,这应该会提高性能。

我记得做那种事情和性能不是一个大问题,我在 iPhone 3GS 上得到了大约 12fps。这还不错。 (我没有使用贝塞尔路径,我正在使用 CGImageRefs 和原始 rgba 缓冲区进行一些图像处理,这应该是这种方法中最昂贵的部分。只计算 BezierPath 的一条弧线/线非常便宜)

关于cocoa-touch - 增量添加到 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6326260/

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