0

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

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

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

4

1 回答 1

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

于 2015-10-23T14:17:04.580 回答