ios - 如何绘制渐变填充弧,即彩虹?

标签 ios iphone objective-c

以下代码绘制了一个从红色到绿色渐变的半圆。 这不是我想要的。 我期望用渐变绘制宽度为 5 像素的弧。

如能帮助我指出错误之处,我们将不胜感激。

查尔斯

-(void) DrawRainbow {
// Create an arc path
float x = 150.0;
float y = 220.0;
float radius = 75.0;
float startAngle = M_PI;
float endAngle   = 2*M_PI;
bool clockWise = false;
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, nil, x, y, radius, startAngle, endAngle, clockWise);

// Setup the gradient
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = {
    1.0, 0.0, 0.0, 1.0,   // Start color is red
    0.0, 1.0, 0.0, 1.0 }; // End color is green
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradientFill = 
    CGGradientCreateWithColorComponents (colorSpace, components,
                                         locations, num_locations);
// setup gradient points
CGRect pathRect = CGPathGetBoundingBox(path);
CGPoint myStartPoint, myEndPoint;
myStartPoint.x = CGRectGetMinX(pathRect);
myStartPoint.y = CGRectGetMinY(pathRect);
myEndPoint.x   = CGRectGetMaxX(pathRect);
myEndPoint.y   = CGRectGetMinY(pathRect);

// draw the gradient
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 5.0);
CGContextAddPath(context, path);
CGContextSaveGState(context);
CGContextClip(context);
CGContextDrawLinearGradient (context, gradientFill,
                             myStartPoint, myEndPoint, 0);
CGContextRestoreGState(context);

CGGradientRelease(gradientFill);
CGColorSpaceRelease(colorSpace);

最佳答案

关于ios - 如何绘制渐变填充弧,即彩虹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2821440/

相关文章:

iphone - 具有用于渲染和游戏逻辑的独立计时器的游戏循环

iphone - 我如何在给定时间段内运行任务?

iPhone - 从照片中访问位置信息

iphone - 如何重置 UINavigationController?

iphone - 使用 dispatch_async 加速搜索?

ios - Objective-c:将 NSArray 全部小写

ios - 单元格中的 UIVisualEffectView 会减慢 UICollectionView 的滚动速度

objective-c - 我希望在用户单击导航 View 中的 'save' 按钮时重新加载 TableView

ios - 在 App Store 中允许通过视频复制 iOS 库音乐吗?

objective-c - iOS Messenger 的属性