如何在iPhone上使用整数值生成图表(how to generate graphs using i

2019-10-16 15:25发布

我想表现出的iPhone grapph /条形图我如何做到这一点没有定制的API; S

Answer 1:

你可能想调查的核心地块项目[code.google.com]。 核心情节是在WWDC今年的科学编码项目的主题,是某些情况下已经相当可用。 自成立以来,核心情节的目的是为OS X和iPhone使用。 源分布(还没有二进制版本还)配备了OS X和iPhone的应用实例,并有该项目的维基使用它作为一个iPhone应用程序库的信息。 下面是它目前的绘图功能的例子。

替代文字http://core-plot.googlecode.com/files/DarkGraph.png



Answer 2:

写你自己的。 这并不容易,我在现在做同样的事情的过程。 以下是我正在做它:

首先,忽略任何愿望可能无法使用一个UIScrollView如果你想允许缩放尝试。 这是完全不值得。

其次,创造这样一个GraphElement协议。 我有一个看起来像这样一个层次结构:

  • GraphElement
  • GraphPathElement
  • GraphDataElement
  • GraphDataSupplierElement

GraphElement包含一个图形元件,包括如何绘制,最大宽度(用于放大),点是否是元件(触摸)和标准内的基本必要的方法touchBegantouchMoved ,和touchEnded功能。

GraphPathElement包含CGPath ,线的颜色和宽度,填充颜色和绘制模式。 每当它的提示画,它只是增加了路径上下文,设置颜色和线宽,并提请用的描绘模式的路径。

GraphDataElement ,作为一个子类GraphPathElement ,发生在一组在xy坐标中,曲线型(bar或线),一个框架,以及一个边界数据。 该帧是所创建的输出CGPath的实际大小。 边界是在输入坐标数据的大小。 从本质上讲,它可以让你的数据缩放到屏幕大小。

它通过首先计算仿射变换到边界转换到帧创建的曲线图,然后将其循环通过每个点,并增加了它作为数据传输到路径,施加在添加它之前的是变换的点。 它是如何添加数据取决于类型。

如果它是一个条形图,它创建的(x,frame.size.height-Y)0宽度的矩形,产地,和高度= Y。 然后,它“插图”图形由-3水平像素,并添加到该路径。

如果它是一个曲线图,它的简单得多。 它只是移动到第一点,然后为每个另一点,它增加了一个行至该点,在该点周围一个矩形增加了一个圈,然后移动到该点去到下一个点。

GraphDataSupplierElement是接口到我的数据库,实际上包含了所有的数据。 它确定它应该是什么样的图形的,格式化数据转换成所需要的类型GraphDataElement ,并将其传递,与颜色使用该特定曲线图。

对我来说,x轴是时间,并且被表示为NSTimeInterval秒。 所述GraphDataSupplierElement包含minDatemaxDate使得GraphDateElement根据需要可以绘制在x轴上的标记。

一旦完成所有这些,你需要创建实际的图形。 你可以去它的几种方法。 一种选择是让所有在元素NSArray ,每当drawRect:被调用时,遍历每个元素绘制。 另一个选择是创建一个CALayer每个元素,并使用GraphPathElement作为CALayer的委托。 或者你可以让GraphPathElement从延长CALayer直接。 这取决于你在这一个。 我还没有就得到作为试图CALayer小号呢,我还停留在简单NSArray阶段。 我可以移动到CALayer在某一时刻S,一旦我很满意一切的样子。

所以,一切的一切,这个想法是,你创建的图形为一个或多个CGPath小号事前,只是画,当你需要绘制图形,而不是试图去真正分析数据时,你得到drawRect:打电话。

缩放可以通过保持源数据在您完成GraphDataElement ,只是改变了框架,使边界在框架的缩放创建CGPath比屏幕宽,或任何你的需求是什么。 我基本上重新实现我自己捏缩放为我的图表UIView子类,只有缩放水平,通过改变它的变换,然后在完成后,得到当前帧,重置变换身份,设置帧保存的价值,并设置所有的帧GraphElement s到新的帧为好,使他们的规模。 然后,只需调用[self setNeedsDisplay]画画。

无论如何,这是一个有点絮絮叨叨十岁上下,但它是我是如何做到这一点的轮廓。 如果你有更具体的问题,随意评论。



文章来源: how to generate graphs using integer values in iphone