我在iOS应用中使用 ShinobiCharts 来绘制折线图。这需要一个功能,其中默认视图将以天为单位。当我捏缩放时,我将获得周数据,更多捏缩放将给我月数据。同样适用于以相反顺序缩小。 我无法找到以不同缩放级别显示此数据的方法。 请帮我解决一下这个。 我使用以下委托方法来检查缩放级别
- (void)sChartIsZooming:(ShinobiChart *)chart withChartMovementInformation:
(const SChartMovementInformation *)information;
但我找不到任何方法来检查缩放级别。
答案 0 :(得分: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
以返回要在当前视图级别显示的点数。