2013-12-13 53 views
2

我想知道是否有可能在一定的时间间隔后使用Coreplot iOS库之间的自定义间距。
像在下面的图片中,在每个7个酒吧后显示一个不寻常的酒吧。
如果可以,请指导如何实现?Coreplot iOS - 图形条之间的自定义空间

Problem Visual

回答

0

CPTBarPlot有代码来管理这个。

-(BOOL)barAtRecordIndex:(NSUInteger)idx basePoint:(CGPoint *)basePoint tipPoint:(CGPoint *)tipPoint

基本上得到酒吧,并将其``基点and tipPoint```。

最后,它使用barOffsetLength根据其索引偏移每个小节。

对于垂直条,在你的情况下,其偏移碱和尖点的x坐标。这些通常是相同的。在这里您可以选择添加自己的偏移量。

简单地说,这里就是你需要在同一个函数在那里做什么:

CGFloat barOffsetLength = [self lengthInView:self.barOffset] * self.barOffsetScale; 
if ([self.dataSource hasGapBeforeIndex:idx]) { 
    offsetGap += [self.dataSource gapValue]; 
} 

// Offset 
if (horizontalBars) { 
    basePoint->y += barOffsetLength; 
    tipPoint->y += barOffsetLength; 
} 
else { 
    //HERO 

    basePoint->x += barOffsetLength + offsetGap; 
    tipPoint->x += barOffsetLength + offsetGap; 
} 

在这里,你介绍CPTBarPlot称为offsetGap一个新的变量,它得到增量每次你介绍一个缺口。 (小心,当您更改数据集时,这需要重置为零)。

此外,在CPTPlotDataSource介绍

- (BOOL) hasGapBeforeIndex:(NSUInteger)index; 
- (CGFloat) gapValue; 

,并在您的视图控制器实现它。现在你可以在任何地方引入差距。

PS:这显然是一种黑客攻击,它可能会破坏轴标签和其他可能需要调整的东西,但总体上给出了概述。

我玩过示例应用程序来实现此目的。

+0

这些数据源方法在任何地方都没有被调用。 –

0

您需要修改定位于核心绘图数据源方法,x轴

- (NSNumber *) numberForPlot:(CPTPlot *)plot field:(NSUInteger)fieldEnum recordIndex:(NSUInteger)idx 

,并考虑到要发生的间距帐户。如果你仍然不明白,请张贴一些代码,我会告诉你。

逻辑例如:

我要代表一个月的数据,可以说一个有30天,但每次5天,我想在每个5天暂停。因此,而不是在

- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plot 

返回30,返回34,并且在索引6,11,16,21和26为你上述方法返回0。

如果您不想为'暂停'留出太多空间并返回两倍的天数(60)减去4(因为暂停时只返回一个记录的值0)并且返回为每个2记录数据源中的对应值。这可以再次扩展到你需要的乘数。我希望你明白我的意思。

+0

但是,这将添加一个栏(这将不可见)+酒吧空间...这不是一个好的解决方案(太多,然后所需的间距)...所以这可能有这个酒吧空间每个客户的要求? – yunas

+0

它不会添加一个条,因为您为该记录返回了'0',这会导致一个空的空间。你第一次尝试我的建议吗? –

+0

和那个空间的大小是固定的,因为我希望这个空间具有动态大小。这是如何实现的? – yunas

相关问题