檢查此方法的一種方法是確定當前在軸的可見範圍內顯示的天數。
首先就需要一種方法來記錄數據的當前粒度上顯示在圖表中:
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
以返回要在當前視圖級別顯示的點數。