Уменьшить масштаб на уровнях в шинобихартс ios

Я использую ShinobiCharts в своем приложении для iOS, чтобы построить график. Для этого требуется функция, где в представлении по умолчанию будет в днях. Когда я ущипну масштабирование, я получу данные за неделю, а большее масштабирование даст мне данные за месяцы. То же самое относится и к уменьшению масштаба в обратном порядке. Я не могу найти способ показать эти данные при разных уровнях масштабирования. Пожалуйста, помогите мне с этим. Я использую следующий метод делегата, чтобы проверить уровень масштабирования

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

но я не могу проверить уровень масштабирования.

1 ответ

Один из способов проверить это - определить количество дней, отображаемых в данный момент в видимом диапазоне оси.

Прежде всего вам понадобится способ записать текущую детализацию данных, отображаемых на графике:

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 вернуть количество точек для отображения на текущем уровне просмотра.

Другие вопросы по тегам