2

私のアプリにはビューがあり、左右に小さな透明なグラデーションが必要です。左または右のグラデーションを非常に簡単に作成できますが、それらを組み合わせる方法がわかりません:

CAGradientLayer *rightLayer = [CAGradientLayer layer];
rightLayer.frame = self.bounds;
rightLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
rightLayer.startPoint = CGPointMake(0.8f, 1.0f);
rightLayer.endPoint = CGPointMake(1.0f, 1.0f);

CAGradientLayer *leftLayer = [CAGradientLayer layer];
leftLayer.frame = self.bounds;
leftLayer.colors = [NSArray arrayWithObjects:(id)[UIColor clearColor].CGColor,(id)[UIColor whiteColor].CGColor, nil];
leftLayer.startPoint = CGPointMake(0.0f, 1.0f);
leftLayer.endPoint = CGPointMake(0.2f, 1.0f);


self.layer.mask = leftLayer;

ご覧のとおり、問題は、マスクに1つのレイヤーのみを割り当てる必要があり、2つのレイヤーが必要なことです。leftLayer と rightLayer をマージするにはどうすればよいですか? または、これらのレイヤーの両方をマスクに追加するにはどうすればよいですか?

答えてくれてどうもありがとう!

4

2 に答える 2

4

クリアからホワイトに変化するグラデーションで1つのグラデーションレイヤーを作成して、もう一度クリアしlocations、3つのポイントにを設定する必要があります。したがって、endPointを1に設定して、ビューの反対側(幅全体をカバー)に設定する必要があります。

次のように、ポイントをNSValueオブジェクトでラップして、ロケーション配列に追加する必要があります。[NSValue valueWithCGPoint:myCGPoint];

場所は0から1の間に定義されているため、マスキングするレイヤーの幅に応じて値を計算する必要があります。このようなもの:

0.2/width         // left edge
(width-0.2)/width // right edge

すでに開始点と終了点を0から1の範囲で設定しているので、同じ値を使用してください。

于 2012-06-13T14:34:36.780 に答える
2

トリックは、他の人が述べたように「場所」を使用することです。以下のコードは、上と下で「フェードアウト」グラデーションを行います。スクロールするテキストを画面の両端でフェードアウトさせたい場合に便利です。以下の停止位置は、0.0 => 0.1 はクリアから白へのフェード、0.9 => 1.0 は白から再びクリアへのフェードとして読み取る必要があります。

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = @[(id)[[UIColor clearColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor whiteColor] CGColor], (id)[[UIColor clearColor] CGColor]];
gradient.startPoint = CGPointMake(0.5, 0.0);
gradient.endPoint = CGPointMake(0.5, 1.0);
gradient.locations = @[@0.0, @0.1, @0.9, @1.0];

[self.layer setMask:gradient];

#import <QuartzCore/QuartzCore.h>ファイルに含めることを忘れないでください。

于 2014-04-10T13:18:32.913 に答える