Ленточные графики (диаграммы) с базовой графикой - PullRequest
2 голосов
/ 19 января 2012

Я генерирую классический линейный график, используя основную графику, которая хорошо отрисовывается и работает. Есть несколько линий, которые укладываются одна за другой, используя "layer.zPosition"

-(void)drawRect:(CGRect)rect {



        float colorChange = (0.1 * [self tag]);

        theFillColor = [UIColor colorWithRed:(colorChange) green:(colorChange*0.50) blue:colorChange alpha:0.75f].CGColor;


        CGContextRef c = UIGraphicsGetCurrentContext();
        CGFloat white[4] = {1.0f, 1.0f, 1.0f, 1.0f};    
        CGContextSetFillColorWithColor(c, theFillColor);
        CGContextSetStrokeColor(c, white);
        CGContextSetLineWidth(c, 2.0f);
        CGContextBeginPath(c);
        //
        CGContextMoveToPoint(c, 0.0f, 200-[[array objectAtIndex:0] floatValue]);
        CGContextAddLineToPoint(c, 0.0f, 200-[[array objectAtIndex:0] floatValue]);
        //
        distancePerPoint = (rect.size.width / [array count]);
        float lastPointX = 750.0;
        for (int i = 0 ; i < [array count] ; i++)
        {


            CGContextAddLineToPoint(c, (i*distancePerPoint), 200-[[array objectAtIndex:i] floatValue]);


            lastPointX = (i*distancePerPoint);
        }
        //
        CGContextAddLineToPoint(c, lastPointX, 200.0);
        CGContextAddLineToPoint(c, 0, 200);
        CGContextClosePath(c);
        //
        //CGContextFillPath(c);
        CGContextDrawPath(c, kCGPathFillStroke);
        //CGContextDrawPath(c, kCGPathStroke);

    }

(Приведенный выше код генерирует следующий результат): enter image description here

(Я могу опубликовать код, который я использую для 3D-эффекта, если необходимо, но способ, которым я делаю это, в общем CATransform3D вращениеAndPerspectiveTransform = CATransform3DIdentity;)

Вопрос: Как я могу преобразовать мой линейный график, чтобы иметь глубину? Я хотел бы иметь «глубину» для графика линий (ий), что сделает их ленточными, а позже я бы хотел представить их с помощью поворота и преобразования перспективы (как указано выше)

enter image description here

1 Ответ

0 голосов
/ 19 января 2012

Вы не можете легко сделать это с Core Graphics или Core анимацией, потому что CALayers «плоские» - они работают как оригами, где вы можете создавать 3D-структуры, соединяя прямоугольники в 3D-пространстве, но вы не можете иметь произвольное многоугольное 3Dфигур.

На самом деле это не совсем верно, вы можете взглянуть на использование CAShapeLayers для рисования, а затем манипулировать ими в 3D, но я думаю, что в общем случае будет очень тяжело вычислить, где расположитьпридать форму и добиться правильного выравнивания краев.

Действительно, для создания такого типа 3D-структуры необходимо использовать OpenGL напрямую.

Если вы не слишком знакомы с низкоуровневымПрограммирование OpenGL, вы можете попробовать Galaxy Engine или Cocos3D.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...