gpt4 book ai didi

ios - 如何简单地将图形内容添加到 iOS 中的当前屏幕

转载 作者:行者123 更新时间:2023-11-29 12:57:24 25 4
gpt4 key购买 nike

这似乎是一件很基本的事情,我不敢相信我不知道如何去做。为了使描述易于理解,假设我只是想在屏幕上绘制一堆随机矩形。这些随机的矩形会不断地相互叠加,直到有什么东西停止了这个过程。如何做到这一点?

我见过的最接近的解释是绘图应用程序,其中的基本方案是绘制到 ImageView 中,首先将以前的图像复制到新图像中,然后添加新内容。复制原始图像肯定看起来是在浪费精力,而且看起来应该可以简单地将新内容写在现有的任何地方。我是否遗漏了一些明显的东西?

请注意,drawRect 会替换整个框架。它适用于绘制一小组对象,但当还需要显示不确定数量的历史记录时,它很快就会变得很尴尬。

编辑:我附上了一些示例图像,这些图像是来自 Mix C 程序的屏幕打印,可以执行我想要的操作。本质上,元胞自动机在屏幕上移动并留下轨迹。轨迹的颜色取决于自动机中的逻辑以及自动机刚刚行进到的像素的颜色。自动机应该能够以每秒数百个像素的速度移动。由于自动机使用的逻辑,我不仅需要能够快速写入图像,还需要能够查询像素的颜色(或镜像数据)。

enter image description here

enter image description here

enter image description here

最佳答案

通常,您可以通过为所有矩形创建单独的路径或图层(如果您想跟踪它们),或者通过重复绘制到 CGBitmapContextRef 中,然后将其转换为图像并在 drawRect: 中绘制它。这基本上与您描述的方法相同(“基本方案是绘制到 ImageView 中……”),只是不需要复制图像。您只需继续使用相同的上下文并从中制作新图像。

您可以在此处使用的另一个工具是 CGLayer。由于性能问题,Core Graphics 团队不鼓励使用它,但它确实使这种绘图更加方便。当您查看文档时,他们说“受益于改进的性能”,请记住这是在 2006 年编写的,当我询问 Core Graphics 团队时,他们说今天更快的答案是 CGBitmapContext。但是在这种问题上你不能为了方便而打败 CGLayer


通过维护一个您不断写入的CGBitmapContext 应该没问题(这也允许您从中读取)。当它改变时,调用 setNeedsDisplayInRect:。在 drawRect: 中,创建图像,并使用 CGContextDrawImage 绘制它,传递给您的矩形。 (您可能会通过整个矩形。)

在 CALayer 而不是 UIView 上执行此操作可能更灵活一些,但我怀疑您会看到性能上的巨大差异。 View 将绘图传递给它的层。

每秒更新的次数并不是那么重要。 drawRect: 的调用频率不会超过帧速率(最大 60 fps),无论您调用 setNeedsDisplayInRect: 的频率如何。所以你不会每秒创建数百或数千次图像;就在你需要画点什么的时候。

您是否发现了特定的性能问题,或者您只是担心将来可能会遇到性能问题?您有任何显示问题的示例代码吗?我并不是说它不能慢(如果你想用视网膜全屏显示的话可能会慢)。但是您想从简单的解决方案开始,然后再进行优化。苹果在幕后做了很多图形优化。不要试图过多地猜测它们。他们非常擅长生成和绘制图像。

关于ios - 如何简单地将图形内容添加到 iOS 中的当前屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20695156/

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