在iOS开发中,如果使用Core Graphics和/或Quartz 2D,我怎样才能绘制出一个渐变的圆形,使其看起来像一个球体?

到目前为止,我已经看过使用CGContextDrawLinearGradient()和CGContextDrawRadialGradient(),但是,与前者我无法弄清楚如何使梯度看起来像一个球体,与后者,我不知道如何使渐变成一个球体的形状,因为每次我尝试,它变成了完整的圆柱体而不是只有一个球体的形状。

下面显示了我用来绘制2D圆圈的代码。 我想使用梯度或任何其他方法可能使用只有核心graphics和/或石英2D填充圆的方式,使它看起来像一个球体。

当前绘制圆圈的代码:

CGContextRef ctx = UIGraphicsGetCurrentContext(); float x = 20.0; float y = 20.0; float radius = 12.5; CGContextFillEllipseInRect(ctx, CGRectMake(x, y, radius, radius); 

PS – 上面的代码正如它应该的那样工作,所以万一出现任何错误,他们只是从我的错误input问题,而不是在input代码到实际的文件。

我相信这是你正在寻找的效果:

在这里输入图像说明

这是使用径向渐变创build的。 渐变以半径0开始,以圆的大小的半径结束。 起点的中心点必须在最终创build的圆圈内,否则您将获得圆锥形状。 下面是我用来制作这个图片的代码(在你使用它之前需要将一些部分翻译成iOS):

 CGContextRef ctxt = [[NSGraphicsContext currentContext] graphicsPort]; CGGradientRef gradient; CGColorSpaceRef colorSpace; CGFloat locations[] = {0.0,1.0}; CGFloat components[] = { 0.5,1.0,1.0,1.0, 0.25,0.5,0.5,1.0 }; colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); gradient = CGGradientCreateWithColorComponents(colorSpace,components,locations, sizeof(locations)/sizeof(CGFloat)); CGPoint start = {70.0,130.0}, end = {100.0,100.0}; CGFloat startRadius = 0.0, endRadius = 90.0; CGContextDrawRadialGradient(ctxt,gradient,start,startRadius,end,endRadius,0); CGGradientRelease(gradient); CGColorSpaceRelease(colorSpace);