Objective c 带核心图形的带状图(图表)
我正在使用核心图形生成一个经典的线图,它可以很好地渲染和工作。 有几行使用“layer.zPosition”依次堆叠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
-(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);
}