gpt4 book ai didi

ios - 呈现设备经常更新的线的最佳方式

转载 作者:行者123 更新时间:2023-11-28 21:21:47 24 4
gpt4 key购买 nike

所以现在我有一个持续的数据流进入设备,我想在数据进入时绘制一条实时趋势线。

这是我将测试数据输入系统的方式

    self.timer = [NSTimer scheduledTimerWithTimeInterval:0.100f
target:self
selector:@selector(didGetTimerEvent:)
userInfo:nil
repeats:YES];

//
// This is what's in the timer function
//
static CGFloat trigger = 0;
const CGFloat weight = 50;

// the line view, unsurprisingly, is what draws the line
lineView.value = 12 * cosf(trigger) * M_PI * 0.6 + weight;
trigger++;
if (trigger > 100) trigger = 0;

简单吧,就是一条波浪线。

在行 View 的 setValue 属性中,它将值附加到 NSArray。然后它调用渲染函数,在其中创建一个点并将其添加到 CGPath,然后依次将其设置为 CAShapeLayer 的路径属性。之后,CAShapeLayer 处理将所述点绘制到屏幕的细节。

这是画一条频繁更新的线的最佳方式吗?

如果我只在屏幕上放置一个图表,分析器中的 CoreAnimation 工具会读取我正在以 25 fps 的速度绘制,所以现在我开始重新考虑我的实现。

最佳答案

这是一个相当标准的优化问题。首先,您需要确保有效地绘制线条。周围有很多东西:

  • 关闭您在 CGContext 中不需要的任何花哨选项(如果您使用的是 CGPath,否则在您的 UIBezierPath,特别是确保像 setFlatnesssetLineCapsetLineJoin 等设置尽可能简单。你甚至可能想要关闭 setShouldAntialias

  • 确保您没有添加比点短的线段。这是一个常见的错误。

  • 不要让路径无限延伸。我在旧硬件 (iPad 3) 上有多达 5000 个元素的路径,但如果让路径永远增长,任何硬件都会不堪重负。

  • 最终您可能会发现自己在 CGBitmapContext 中绘制更改要容易得多。如果需要,您甚至可以直接翻转像素。很难通过这种方式获得漂亮的抗锯齿线,但您绝对可以获得超快的速度。

  • 曲线更新速度不要快于屏幕刷新速度。这是另一个常见错误,人们每秒计算复杂曲线 100 次,而屏幕每秒仅更新 60 次。

但这主要是一个绘图优化问题。所有有趣的代码都在您未显示的 setValue 方法中。如果您已经难以管理 30fps,那么是的,您肯定是在分析您的绘图。

关于ios - 呈现设备经常更新的线的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39583750/

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