放大缩小在shinobicharts ios的水平

时间:2015-10-19 11:36:45

标签: ios shinobi

我在iOS应用中使用 ShinobiCharts 来绘制折线图。这需要一个功能,其中默认视图将以天为单位。当我捏缩放时,我将获得周数据,更多捏缩放将给我月数据。同样适用于以相反顺序缩小。 我无法找到以不同缩放级别显示此数据的方法。 请帮我解决一下这个。 我使用以下委托方法来检查缩放级别

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

但我找不到任何方法来检查缩放级别。

1 个答案:

答案 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以返回要在当前视图级别显示的点数。