Objective c 带核心图形的带状图(图表)

Objective c 带核心图形的带状图(图表),objective-c,ios,graph,charts,ribbon,Objective C,Ios,Graph,Charts,Ribbon,我正在使用核心图形生成一个经典的线图,它可以很好地渲染和工作。 有几行使用“layer.zPosition”依次堆叠 -(void)drawRect:(CGRect)rect{ float colorChange=(0.1*[自标记]); theFillColor=[UIColor color withred:(colorChange)green:(colorChange*0.50)blue:colorChange alpha:0.75f].CGColor; CGContextRef c=UIG

我正在使用核心图形生成一个经典的线图,它可以很好地渲染和工作。 有几行使用“layer.zPosition”依次堆叠

-(void)drawRect:(CGRect)rect{
float colorChange=(0.1*[自标记]);
theFillColor=[UIColor color withred:(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,填充颜色);
CGContextSetStrokeColor(c,白色);
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]);
浮动lastPointX=750.0;
对于(int i=0;i<[数组计数];i++)
{
CGContextAddLineToPoint(c,(i*distancePerPoint),200-[[array objectAtIndex:i]floatValue]);
lastPointX=(i*每点距离);
}
//
CGContextAddLineToPoint(c,lastPointX,200.0);
CGContextAddLineToPoint(c,0200);
CGContextClosePath(c);
//
//CGContextFillPath(c);
CGContextDrawPath(c,kCGPathFillStroke);
//CGContextDrawPath(c,kCGPathStroke);
}
(上述代码正在生成以下结果):

(如果需要的话,我可以发布我用于3d效果的代码,但我的方式通常是 CATTransferM3D旋转和透视变换=CATTransferM3D实体;)

问题: 如何将线图转换为具有深度? 我希望有一个“深度”的线(s)图(从而使他们成为一个功能区),因为稍后我想表示他们使用旋转和透视变换(如上所述)


核心图形或核心动画很难处理,因为CALayers是“平面”的-它们的工作原理类似于折纸,可以通过在3D空间中连接矩形来制作3D结构,但不能具有任意多边形3D形状

事实上,这并不是严格意义上的真实情况,你可以考虑使用CAShapeLayers来绘制,然后在3D中操作它们,但我认为这通常是非常困难的工作来计算每个形状的位置,并使边缘正确对齐

真正制作这种3D结构的方法是直接使用OpenGL


如果您对低级OpenGL编程不太熟悉,您可能想查看Galaxy Engine或Cocos3D。

核心图形或核心动画无法轻松使用,因为Calayer是“平面”的-它们的工作原理类似于折纸,您可以通过在3D空间中连接矩形来制作3D结构,但是不能有任意的多边形3D形状

事实上,这并不是严格意义上的真实情况,你可以考虑使用CAShapeLayers来绘制,然后在3D中操作它们,但我认为这通常是非常困难的工作来计算每个形状的位置,并使边缘正确对齐

真正制作这种3D结构的方法是直接使用OpenGL


如果您对低级OpenGL编程不太熟悉,您可能希望查看Galaxy Engine或Cocos3D。

谢谢,如果您对这个问题没有异议,我会再多问一点。我有一种感觉,可能还有其他的方法尽管如此,谢谢你,谢谢,如果你同意的话,我会再多问你一点。我有一种感觉,可能还有其他的方法不过谢谢大家,,
-(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);

    }