как нарисовать линейный график в ios? Любой элемент управления, который поможет мне отображать данные графика в ios

Я хочу создать индивидуальный график.

Который покажет по оси Y количество математических вычислений, например. 4

Легенды оси Y будут датой начала и датой окончания.

А по оси X линейный график будет отображать точки состояния каждого совпадения.

Победа, ничья, поражение.

Как это сделать в Objective C!??


person saurabh2810    schedule 12.08.2015    source источник
comment
Выполняли ли вы какой-либо веб-поиск графической библиотеки iOS? Вы также можете посмотреть на maniacdev.com   -  person stevekohls    schedule 12.08.2015
comment
Да, я также искал элементы управления с открытым исходным кодом, но они обычно используются только для отображения информации о запасах и не настраиваются.   -  person saurabh2810    schedule 13.08.2015
comment
Смотрите мой ответ. Если вы посмотрите на перечисленные библиотеки исходного кода, вы сможете найти код, который вы можете изменить в соответствии со своими потребностями.   -  person stevekohls    schedule 13.08.2015
comment
@stevekohls Хорошо. Спасибо за поддержку. И извините за неясный вопрос. В следующий раз постараюсь быть более конкретным.   -  person saurabh2810    schedule 14.08.2015


Ответы (2)


Чтобы создать линейный график, нам нужен только один путь UIBezier и один CAShapeLayer, передайте координатные точки на основе имеющихся данных в UiBezierpath, который создаст линейный график, а затем добавьте этот путь в слой.

Вот код для создания линейного графика,

//Bezier path for ploting graph
_graphPath = [[UIBezierPath alloc]init];
[_graphPath setLineWidth:10];

//CAShapeLayer for graph allocation
_graphLayout = [CAShapeLayer layer];
_graphLayout.frame = CGRectMake(self.frame.size.width*0, 0, self.frame.size.width*0.8, (self.frame.size.height*0.9));
_graphLayout.fillColor = [[UIColor colorWithRed:0 green:0 blue:255 alpha:0.1] CGColor];
_graphLayout.strokeColor = [UIColor blueColor].CGColor;
_graphLayout.lineWidth = 2;
_graphLayout.path = [_graphPath CGPath];
_graphLayout.lineCap = @"round";
_graphLayout.lineJoin = @"round";
[self.layer addSublayer:_graphLayout];

Код для добавления линии к точке и перемещения к точке

[_graphPath moveToPoint:CGPointMake(coord.x, coord.y)];
[_graphPath addLineToPoint:CGPointMake(coord.x, coord.y)];
_graphLayout.path = [_graphPath CGPath];
person Kumar Swamy    schedule 26.07.2016

Я сделал метод для возврата представления с нанесенными на график точками данных:

-(UIView *)createGraphWithFrameSize:(CGSize)frameSize
                     lineColor:(UIColor *)lineColor
                      xAxisMin:(float)xAxisMin
                      xAxisMax:(float)xAxisMax
                      yAxisMin:(float)yAxisMin
                      yAxisMax:(float)yAxisMax
                    dataPoints:(NSArray <NSValue *> *)dataPoints {

    UIView *graph = [UIView new];

    graph.backgroundColor = [UIColor clearColor];

    graph.frame = CGRectMake(0, 0, frameSize.width, frameSize.height);

    //

    CAShapeLayer *line = [CAShapeLayer layer];
    UIBezierPath *linePath = [UIBezierPath bezierPath];

    int i = 0;

    while (i < dataPoints.count) {

        CGPoint point = [dataPoints[i] CGPointValue];

        float xRatio = 1.0-((xAxisMax-point.x)/(xAxisMax-xAxisMin));
        float yRatio = 1.0-((yAxisMax-point.y)/(yAxisMax-yAxisMin));

        float x = xRatio*frameSize.width;
        float y = (1.0-yRatio)*frameSize.height;

        if (i == 0) {
            [linePath moveToPoint:CGPointMake(x, y)];
        } else {
            [linePath addLineToPoint:CGPointMake(x, y)];
        }

        i++;

    }

    line.lineWidth = 2.0;
    line.path = linePath.CGPath;
    line.fillColor = [[UIColor clearColor] CGColor];
    line.strokeColor = [lineColor CGColor];
    [graph.layer addSublayer:line];

    //

    graph.clipsToBounds = YES;

    return graph;

}

Пример использования:

#define xy(__x,__y) [NSValue valueWithCGPoint:CGPointMake(__x,__y)]

    UIView *plotView = [self createGraphWithFrameSize:CGSizeMake(300, 300)
                                            lineColor:[UIColor colorWithRed:0.0 green:0.0 blue:1.0 alpha:0.8]
                                             xAxisMin:-5
                                             xAxisMax:5
                                             yAxisMin:-5
                                             yAxisMax:5
                                           dataPoints:@[xy(-5,-4),
                                                        xy(0,3),
                                                        xy(5,-4)]];

    plotView.backgroundColor = [UIColor colorWithWhite:0.5 alpha:0.5];
    [self.view addSubview:plotView];
person Albert Renshaw    schedule 21.08.2019
comment
Можете ли вы объяснить, как реализовать это в проекте. - person muthukumaresh; 20.02.2020
comment
@muthukumaresh Я уже включил пример использования во второй раздел. Скопируйте и вставьте первый раздел в тело файла .m вашего контроллера представления, затем скопируйте и вставьте второй раздел в метод указанного .m, например, viewDidLoad - person Albert Renshaw; 20.02.2020