14

UIImageViewFlipboardのように、影のようなグラデーションを作成しようとしています。

その一例がこの画像の写真です

http://taitegallery.net/wp-content/uploads/2012/01/flipboard-iphone.jpg

右のiPhoneを見るとわかるように、上下に濃いグラデーションがあります。これは、画像が白の場合でも白い文字が見えるようにするためです。

これを実装する方法について誰か提案がありますか? 私はiOS開発に不慣れなので、これについては無知です。ありがとう!

4

5 に答える 5

20

使用できますCAGradientLayer

  1. プロジェクトに QuartzCore.framework を追加します。(ライブラリまたはフレームワークへのリンクを参照してください)。

  2. QuartzCore ヘッダーをインポートします。

    #import <QuartzCore/QuartzCore.h>
    
  3. 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) 上記の効果が見られるように、画像の背景を透明に置き換えます。

于 2013-09-02T03:11:46.770 に答える
1

スイフト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)
于 2016-10-14T13:14:11.680 に答える
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)
于 2016-08-09T04:50:43.780 に答える