为什么这个复合渐变在 iOS 上看起来很糟糕?

Why does this composite gradient look bad on iOS?

当我使用 Quartz 在 iOS 中合成透明线性和径向渐变时,结果看起来并不像我预期的那样。屏幕截图左侧显示 iOS 版本,右侧显示 Java 测试。有趣的是,如果我在 OS X 上使用 Core Graphics 绘制渐变,它们看起来很好(就像 Java)。

我想知道我是否缺少使这项工作所需的某些渲染选项或混合模式,或者它是否是 iOS 的限制。

绘图是这样完成的:

let linearPaint = CGGradientCreateWithColors( CGColorSpaceCreateDeviceRGB(),
    [darkColor.CGColor, lightColor.CGColor], [0, 1])
CGContextSetAlpha(g, 0.3)
CGContextDrawLinearGradient(g, linearPaint, CGPointMake(x,y), CGPointMake(x,y+h), CGGradientDrawingOptions(rawValue: 0))

let radialPaint = CGGradientCreateWithColors( CGColorSpaceCreateDeviceRGB(),
    [color.CGColor, lightColorTrans.CGColor], [0, 1])
CGContextSetAlpha(g, 0.4)
CGContextDrawRadialGradient(g, radialPaint, center, 0, center, rad, CGGradientDrawingOptions(rawValue: 0))

正如 Glenn Howes 在他的回复中指出的那样,kCGGradientDrawsAfterEndLocation 似乎可以缓解或修复此问题。但是我仍然不确定为什么它应该重要,因为径向渐变应该在末端半径处变为零透明度。