0

我使用 Core Plot 创建了一个散点图。但是,我的图表需要动态刷新(不断添加和删除点)。我需要情节流畅并且看起来“在图表上滑动”。相反,我似乎得到了一条断断续续的线,它一次添加多个值,冻结并再次添加多个值。什么可能导致这种行为?

-(void)updateDataWithVal:(double)percentageUsage
{
    if ([self.graphData count] >= 10)
    {
        [self.graphData removeLastObject];
    }
    [self.graphData insertObject:[NSNumber numberWithDouble:percentageUsage]  atIndex: 0];
    [self.graph reloadData];
}

上面是每次我希望图表改变时调用的函数。问题不在于正在更新的数据。我调试了函数并注意到数据正在流畅地更新(每秒从数据数组中添加和删除一个点)。问题在于图形实际上在变化。什么可能导致图表冻结并一次添加多个点(每 6-7 秒),而不是像数据那样每秒不断更新?

我怀疑这是由于在短时间内添加了许多点造成的。每秒只删除和添加一个点。此外,我的图表只有一个情节。

我的图表在 OSX而不是iOS 上运行。所有代码都在 Objective-C 中。

4

1 回答 1

1

根据要求,我可以将我的评论转换为答案,以便结束。

Core Plot 图严重依赖显示元素,因此对它们的任何更新都必须在主线程上执行。否则,您将看到奇怪的渲染行为,例如不一致的更新、视觉伪影,并且您的应用程序很可能会在某个时候崩溃。

我必须做你在我的一个 Mac 应用程序中描述的同样的事情。为此,我使用一个后台 GCD 队列来处理数据采集和处理,以避免阻塞主线程。但是,每次我需要将结果插入图表并对其进行更新时,我都会使用dispatch_async()将适当的代码包装在要在主线程上执行的块中。这应该可以保护您免受呈现像您在此处看到的那样的奇怪现象。

于 2012-08-21T03:17:07.197 回答