检查这一点的一种方法是确定当前在轴的可见范围内显示的天数。
首先,您需要一种方法来记录图表中显示的当前数据粒度:
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
以返回要在当前视图级别显示的点数。