Требования к операционной системе: iOS 5.0 и выше.
Мобильное устройство: iPad.
В данном примере реализовано изменение размеров маркеров диаграммы, а также создание кистей, предназначенных для заливки на основе указанных параметров и их применение к элементам диаграммы.
При нажатии на пузырек диаграммы отображается метка, а сам пузырек отрисовывается поверх остальных. При повторном нажатии метка скрывается и восстанавливается стандартный порядок отрисовки.
Для выполнения примера необходимо разместить взамен метода executeExample класса ViewController (см. раздел «Создание пузырьковой диаграммы») следующий код:
// Функция для выполнения примера
-(void) executeExample{
// Устанавливаем минимальный размер пузырьков диаграммы
[[chart radialAxis] setMinSize:30];
// Создаем объект линейной градиентной заливки
LinearGradientBrush *linearGBrush = [LinearGradientBrush new];
// Получаем массивы параметров ограничителей градиентов
NSDictionary *gStops = [linearGBrush dumpGradientStops];
NSArray *gStopsValues = [gStops objectForKey:@"value"];
// Создаем на основе полученных параметров новые объекты ограничителей градиентов
GradientStop *s1 = [GradientStop gradientStopWithDict:gStopsValues[0]];
GradientStop *s2 = [GradientStop gradientStopWithDict:gStopsValues[1]];
// Определяем переходный цвет
UIColor *newColor = [UIColor transitionColorFrom:[UIColor lightGrayColor] to:[UIColor blueColor] position:5];
// Устанавливаем цвета ограничителей градиента
[s1 setColor: newColor];
[s2 setColor:[UIColor grayColor]];
// Устанавливаем ограничители градиента
[linearGBrush gradientStops][0] = s1;
[linearGBrush gradientStops][1] = s2;
// Устанавливаем кисть маркера точки ряда диаграммы
[[[[[chart seriesList][0] points] objectForKey:@"0"] marker] setBackground:linearGBrush];
// Определяем кисть
UIColor *solidBrushColor = [UIColor colorWithIntRed:121 green:160 blue:193 alpha:255];
SolidColorBrush *solidBrush = [SolidColorBrush solidColorBrushWithColor:solidBrushColor];
// Получаем параметры кисти
NSMutableDictionary *solidBrushDict = [solidBrush dumpConfigurationToDict];
// Создаем новые кисти на основе полученных параметров
SolidColorBrush *newSolidBrush = [SolidColorBrush solidColorBrushWithDict:solidBrushDict];
[newSolidBrush setOpacity:1];
[newSolidBrush setColor:solidBrushColor];
GradientBrush *gradientBrush = [GradientBrush brushWithDict:solidBrushDict];
// Устанавливаем новые кисти маркеров точек рядов диаграмм
if([newSolidBrush mainColor] != nil)
[[[[[chart seriesList][1] points] objectForKey:@"0"] marker] setBackground:newSolidBrush];
else
[[[[[chart seriesList][1] points] objectForKey:@"0"] marker] setBackground:solidBrush];
if([gradientBrush mainColor] != nil)
[[[[[chart seriesList][2] points] objectForKey:@"0"] marker] setBackground:gradientBrush];
else
[[[[[chart seriesList][2] points] objectForKey:@"0"] marker] setBackground:[SolidColorBrush solidColorBrushWithColor:[UIColor purpleColor]]];
};
Также необходимо взамен метода chartTouchesTapInView:withPoint: разместить следующий код:
// Обрабатываем событие касания области диаграммы
- (void)chartTouchesTapInView:(UIView *)v withPoint:(CGPoint)point{
// Получаем ряд данных
ChartSeries *series = [chart seriesList][0];
// Получаем точку ряда данных
BubblePoint *bPoint = [[series points] objectForKey:@"0"];
// Получаем кисть, определяющую фон маркера точки ряда
LinearGradientBrush *brush = [[bPoint marker] background];
[[brush gradientStops][1] setColor:[UIColor blueColor]];
// Получаем настройки кисти
NSMutableDictionary *d1 = [brush dumpConfiguration];
// Получаем общие настройки кисти
NSMutableDictionary *d2 = [brush dumpConfigurationToDict];
// Получаем настройки прозрачности
NSMutableDictionary *opacityDict = [d1 objectForKey:@"opacity"];
// Устанавливаем новое значение прозрачности
[opacityDict setValue:@0.5 forKey:@"value"];
[d1 setValue:opacityDict forKey:@"opacity"];
[d2 setValue:d1 forKey:@"LinearGradientBrush"];
// Создаем новую кисть на основе указанных параметров
LinearGradientBrush *brush2 = [LinearGradientBrush linearGradientBrushWithDict:d2];
// Установим кисть для маркера точки ряда
[[bPoint marker] setBackground:brush2];
// Получаем объект, по которому произведено нажатие
UIView *sender = [v hitTest:point withEvent:nil];
if ([sender isKindOfClass:[ChartPoint class]])
{
ChartPoint *pt = (ChartPoint *)sender;
if (pt.chartLabel)
{
// Отображаем метку точки если она скрыта или скрываем, если отображена
pt.chartLabelVisible = !pt.chartLabelVisible;
if (pt.chartLabelVisible){
// Отображаем точку ряда поверх остальных точек
[pt moveAboveAllByZOrder];
}
else{
// Восстанавливаем порядок отрисовки
[pt restoreZOrder];
}
}
}
// Перерисовываем диаграмму
[chart redrawChart];
}
В результате выполнения примера будут изменены размеры и фоновые цвета маркеров диаграммы:
1.png)
Нажмем на центральный маркер диаграммы.
В результате будет изменен фоновый цвет и отображена метка маркера, также маркер будет отображен поверх остальных маркеров:
2.png)
Еще раз нажмем на маркер диаграммы.
В результате будет восстановлен предыдущий порядок отрисовки маркеров, а метка маркера будет скрыта:
3.png)
См. также: