にグラデーションを適用しUIImage
ています。一番下が暗くなり、中央がゆっくりとクリアまたはライトグレーに変わります。ほとんど問題ありませんが、このグラデーションの下でいくつかの場所で画像の色が反転するという問題があります。これは非常に迷惑に見えます。どうすれば解決できますか?
これがあなたの便宜のための私の方法です。
さまざまなブレンド モードを選択しようとしましたが、役に立ちません。もう 1 つの質問は、下部の黒をより集中的にするにはどうすればよいかということです。
このメソッドは、追加のコードなしで機能します。開始色は[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;
}