2015-10-19 77 views
0

我正在使用ShinobiCharts在我的iOS應用程序繪製折線圖。這需要一個在默認視圖中以天爲單位的功能。當我捏變焦,我會得到週數據,而更多的捏縮放會給我幾個月的數據。同樣適用於以相反順序縮小。 我無法找到在不同縮放級別顯示此數據的方法。 請幫我這個。 即時通訊使用下面的委託方法檢查縮放級別放大縮小在shinobicharts水平ios

- (void)sChartIsZooming:(ShinobiChart *)chart withChartMovementInformation: 
    (const SChartMovementInformation *)information; 

,但我不覺得任何檢查縮放級別。

回答

0

檢查此方法的一種方法是確定當前在軸的可見範圍內顯示的天數。

首先就需要一種方法來記錄數據的當前粒度上顯示在圖表中:

typedef NS_ENUM(NSUInteger, DataView) 
{ 
    DataViewDaily, 
    DataViewWeekly, 
    DataViewMonthly, 
}; 

初始視圖將是DataViewDaily和內viewDidLoad分配給屬性currentDataView

然後內sChartIsZooming:withChartMovementInformation:你可以這樣做:

- (void)sChartIsZooming:(ShinobiChart *)chart withChartMovementInformation:(const SChartMovementInformation *)information 
{ 
    // Assuming x is our independent axis 
    CGFloat span = [_chart.xAxis.axisRange.span doubleValue]; 

    static NSUInteger dayInterval = 60 * 60 * 24; 

    NSUInteger numberOfDaysDisplayed = span/dayInterval; 

    DataView previousDataView = _currentDataView; 

    if (numberOfDaysDisplayed <= 7) 
    { 
     // Show daily data 
     _currentDataView = DataViewDaily; 
    } 
    else if (numberOfDaysDisplayed <= 30) 
    { 
     // Show weekly data 
     _currentDataView = DataViewWeekly; 
    } 
    else 
    { 
     // Show monthly data 
     _currentDataView = DataViewMonthly; 
    } 

    // Only reload if the granularity has changed 
    if (previousDataView != _currentDataView) 
    { 
     // Reload and redraw chart to show new data 
     [_chart reloadData]; 
     [_chart redrawChart]; 
    } 
} 

現在您的數據源方法中sChart:dataPointAtIndex:forSeriesAtIndex:可以通過對_currentDataView值切換返回適當的數據點。

請注意,您可能還需要更新sChart:numberOfDataPointsForSeriesAtIndex以返回要在當前視圖級別顯示的點數。