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