我正在將梯度應用到UIImage
,我希望它在底部變黑,並緩慢地在中間變爲清晰或淺灰色。 大體上可以,但我有一個問題,我的圖像顏色在某些地方在此漸變下反轉。這看起來很煩人。我如何解決這個問題?將漸變應用於UIImage - 如何去除顏色反轉?
這是我的方法,爲您提供方便。
我試過挑選不同的混合模式,但它沒有幫助。另一個問題是,如何讓底部的黑色更加密集?
該方法無需任何額外的代碼即可工作。 啓動顏色[UIColor blackColor]
和結束顏色是[UIColor clearColor]
:
- (UIImage *)imageWithGradient:(UIImage *)img startColor:(UIColor *)color1 endColor:(UIColor *)color2 {
UIGraphicsBeginImageContextWithOptions(img.size, NO, img.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, img.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeDarken); // tried normal here, same results
CGRect rect = CGRectMake(0, 0, img.size.width, img.size.height);
CGContextDrawImage(context, rect, img.CGImage);
// Create gradient
NSArray *colors = [NSArray arrayWithObjects:(id)color1.CGColor, (id)color2.CGColor, nil];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGGradientRef gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)colors, NULL);
// Apply gradient
CGContextClipToMask(context, rect, img.CGImage);
CGContextDrawLinearGradient(context, gradient, CGPointMake(0,0), CGPointMake(0, img.size.height/2.0), 0);
UIImage *gradientImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGGradientRelease(gradient);
CGColorSpaceRelease(space);
return gradientImage;
}
對於試圖在Swift中實現相同功能的人(imageView with gradient),請確保您的顏色數組的類型是[CGColor]而不是[UIColor]。我沒有收到任何錯誤,但相反,這段代碼被忽略了(視圖不受影響)。發現它[在這個答案](http://stackoverflow.com/a/24380968/1423874)。 – Shahar 2014-10-18 22:58:11