I think something like this will work:
CGContextSaveGState(c);
CGContextAddPath(c, path);
CGContextClip(c)
// make a gradient
CGColorRef colors[] = { topColor, bottomColor };
CFArrayRef colorsArr = CFArrayCreate(NULL, (const void**)colors, sizeof(colors) / sizeof(CGColorRef), &kCFTypeArrayCallBacks);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, colorsArr, NULL);
CFRelease(colorSpace);
CFRelease(colorsArr);
// Draw a linear gradient from top to bottom
CGPoint start = ...
CGPoint end = ...
CGContextDrawLinearGradient(c, gradient, start, end, 0);
CFRelease(gradient);
CGContextRestoreGState(c);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…