2013-12-13 85 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

相關問題