UIImageView
Flipboardのように、影のようなグラデーションを作成しようとしています。
その一例がこの画像の写真です
右のiPhoneを見るとわかるように、上下に濃いグラデーションがあります。これは、画像が白の場合でも白い文字が見えるようにするためです。
これを実装する方法について誰か提案がありますか? 私はiOS開発に不慣れなので、これについては無知です。ありがとう!
UIImageView
Flipboardのように、影のようなグラデーションを作成しようとしています。
その一例がこの画像の写真です
右のiPhoneを見るとわかるように、上下に濃いグラデーションがあります。これは、画像が白の場合でも白い文字が見えるようにするためです。
これを実装する方法について誰か提案がありますか? 私はiOS開発に不慣れなので、これについては無知です。ありがとう!
使用できますCAGradientLayer
:
プロジェクトに QuartzCore.framework を追加します。(ライブラリまたはフレームワークへのリンクを参照してください)。
QuartzCore ヘッダーをインポートします。
#import <QuartzCore/QuartzCore.h>
CAGradientLayer
問題のビューにa を追加します。たとえば、グレーから白への単純なグラデーションの場合:
- (void)addGradientToView:(UIView *)view
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = @[(id)[[UIColor lightGrayColor] CGColor],
(id)[[UIColor whiteColor] CGColor]];
[view.layer insertSublayer:gradient atIndex:0];
}
または、あるグレーの色合いから別のグレーの色合いへ、そしてその逆:
- (void)addGradientToView:(UIView *)view
{
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = @[(id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.0] CGColor],
(id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor]];
[view.layer insertSublayer:gradient atIndex:0];
}
の配列の色colors
を変更してグラデーションを変更し、目的の効果を実現するだけです。画像ビューをコンテナー ビューに配置し、グラデーションを画像ビューではなくコンテナー ビューに適用することができます。さらに、おそらく明らかですが、これは、使用している画像がUIImageView
透明な背景を使用していることを前提としています。そうでない場合は、次のいずれかを変更する必要があります。(a) グラデーションを画像に直接作成します。CAGradientLayer
または (b) 上記の効果が見られるように、画像の背景を透明に置き換えます。
スイフト3
let gradient = CAGradientLayer()
gradient.frame = imageView.bounds
let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25)
let endColor = UIColor.gray
gradient.colors = [startColor.cgColor, endColor.cgColor]
imageView.layer.insertSublayer(gradient, at: 0)
スウィフトに翻訳:
var gradient = CAGradientLayer()
gradient.frame = imageView.bounds
let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25)
let endColor = UIColor.grayColor()
gradient.colors = [startColor, endColor]
imageView.layer.insertSublayer(gradient, atIndex: 0)