Определение кистей заливки

Требования к операционной системе: 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];
}

В результате выполнения примера будут изменены размеры и фоновые цвета маркеров диаграммы:

Нажмем на центральный маркер диаграммы.

В результате будет изменен фоновый цвет и отображена метка маркера, также маркер будет отображен поверх остальных маркеров:

Еще раз нажмем на маркер диаграммы.

В результате будет восстановлен предыдущий порядок отрисовки маркеров, а метка маркера будет скрыта:

См. также:

Примеры использования компонентов