Ios Quartz2d渐变填充椭圆形

Ios Quartz2d渐变填充椭圆形,ios,quartz-2d,Ios,Quartz 2d,我有一个简单的绘图例程,允许用户在屏幕上绘制两个封闭的椭圆形。我想用渐变填充椭圆,用内椭圆表示渐变的“百分比”。i、 梯度将在外椭圆到内椭圆之间平滑过渡 我有互动绘图工作良好,现在我只需要填充梯度 有什么想法吗?文档只讨论完美的圆形渐变,而不是椭圆形 _迈克我不知道这是否可能。但你们可以把圆变成椭圆。其思想是在变换后的坐标系中画一个圆 代码示例: - (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCur

我有一个简单的绘图例程,允许用户在屏幕上绘制两个封闭的椭圆形。我想用渐变填充椭圆,用内椭圆表示渐变的“百分比”。i、 梯度将在外椭圆到内椭圆之间平滑过渡

我有互动绘图工作良好,现在我只需要填充梯度

有什么想法吗?文档只讨论完美的圆形渐变,而不是椭圆形


_迈克

我不知道这是否可能。但你们可以把圆变成椭圆。其思想是在变换后的坐标系中画一个圆

代码示例:

- (void)drawRect:(CGRect)rect
{
   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextSaveGState(context);
   CGContextScaleCTM(context, 1.0, 0.5);
   CGGradientRef gradient;
   CGColorSpaceRef colorspace;
   CGFloat locations[2] = { 0.0, 1.0};
   NSArray *colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor blueColor].CGColor];
   colorspace = CGColorSpaceCreateDeviceRGB();
   gradient = CGGradientCreateWithColors(colorspace, (CFArrayRef)colors, locations);
   CGPoint startPoint, endPoint;
   CGFloat startRadius, endRadius;
   startPoint.x = 180;
   startPoint.y = 180;
   endPoint.x = 180;
   endPoint.y = 180;
   startRadius = 0;
   endRadius = 100;
   CGContextDrawRadialGradient (context, gradient, startPoint, startRadius, endPoint, endRadius, 0);
   CGContextRestoreGState(context);
}
运行代码的结果:


我不知道是否有可能。但你们可以把圆变成椭圆。其思想是在变换后的坐标系中画一个圆

代码示例:

- (void)drawRect:(CGRect)rect
{
   CGContextRef context = UIGraphicsGetCurrentContext();
   CGContextSaveGState(context);
   CGContextScaleCTM(context, 1.0, 0.5);
   CGGradientRef gradient;
   CGColorSpaceRef colorspace;
   CGFloat locations[2] = { 0.0, 1.0};
   NSArray *colors = @[(id)[UIColor whiteColor].CGColor, (id)[UIColor blueColor].CGColor];
   colorspace = CGColorSpaceCreateDeviceRGB();
   gradient = CGGradientCreateWithColors(colorspace, (CFArrayRef)colors, locations);
   CGPoint startPoint, endPoint;
   CGFloat startRadius, endRadius;
   startPoint.x = 180;
   startPoint.y = 180;
   endPoint.x = 180;
   endPoint.y = 180;
   startRadius = 0;
   endRadius = 100;
   CGContextDrawRadialGradient (context, gradient, startPoint, startRadius, endPoint, endRadius, 0);
   CGContextRestoreGState(context);
}
运行代码的结果: