我想表现出的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包含一个图形元件,包括如何绘制,最大宽度(用于放大),点是否是元件(触摸)和标准内的基本必要的方法touchBegan
, touchMoved
,和touchEnded
功能。
GraphPathElement
包含CGPath
,线的颜色和宽度,填充颜色和绘制模式。 每当它的提示画,它只是增加了路径上下文,设置颜色和线宽,并提请用的描绘模式的路径。
GraphDataElement
,作为一个子类GraphPathElement
,发生在一组在xy坐标中,曲线型(bar或线),一个框架,以及一个边界数据。 该帧是所创建的输出CGPath的实际大小。 边界是在输入坐标数据的大小。 从本质上讲,它可以让你的数据缩放到屏幕大小。
它通过首先计算仿射变换到边界转换到帧创建的曲线图,然后将其循环通过每个点,并增加了它作为数据传输到路径,施加在添加它之前的是变换的点。 它是如何添加数据取决于类型。
如果它是一个条形图,它创建的(x,frame.size.height-Y)0宽度的矩形,产地,和高度= Y。 然后,它“插图”图形由-3水平像素,并添加到该路径。
如果它是一个曲线图,它的简单得多。 它只是移动到第一点,然后为每个另一点,它增加了一个行至该点,在该点周围一个矩形增加了一个圈,然后移动到该点去到下一个点。
GraphDataSupplierElement
是接口到我的数据库,实际上包含了所有的数据。 它确定它应该是什么样的图形的,格式化数据转换成所需要的类型GraphDataElement
,并将其传递,与颜色使用该特定曲线图。
对我来说,x轴是时间,并且被表示为NSTimeInterval
秒。 所述GraphDataSupplierElement
包含minDate
和maxDate
使得GraphDateElement
根据需要可以绘制在x轴上的标记。
一旦完成所有这些,你需要创建实际的图形。 你可以去它的几种方法。 一种选择是让所有在元素NSArray
,每当drawRect:
被调用时,遍历每个元素绘制。 另一个选择是创建一个CALayer
每个元素,并使用GraphPathElement
作为CALayer
的委托。 或者你可以让GraphPathElement
从延长CALayer
直接。 这取决于你在这一个。 我还没有就得到作为试图CALayer
小号呢,我还停留在简单NSArray
阶段。 我可以移动到CALayer
在某一时刻S,一旦我很满意一切的样子。
所以,一切的一切,这个想法是,你创建的图形为一个或多个CGPath
小号事前,只是画,当你需要绘制图形,而不是试图去真正分析数据时,你得到drawRect:
打电话。
缩放可以通过保持源数据在您完成GraphDataElement
,只是改变了框架,使边界在框架的缩放创建CGPath
比屏幕宽,或任何你的需求是什么。 我基本上重新实现我自己捏缩放为我的图表UIView
子类,只有缩放水平,通过改变它的变换,然后在完成后,得到当前帧,重置变换身份,设置帧保存的价值,并设置所有的帧GraphElement
s到新的帧为好,使他们的规模。 然后,只需调用[self setNeedsDisplay]
画画。
无论如何,这是一个有点絮絮叨叨十岁上下,但它是我是如何做到这一点的轮廓。 如果你有更具体的问题,随意评论。