web-dev-qa-db-ja.com

CAGradientLayerを別のCALayerのマスクとして適用するにはどうすればよいですか?

CALayerを持つビューがあります。 CAGradientLayerを作成し、それをそのビューのCALayerのマスクとして適用しても、何も起こりません。どうして?

ビューの-initWithFrame:でこれを行います:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = self.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
//[self.layer insertSublayer:gradient atIndex:0];
self.layer.mask = gradient;

交換した場合

self.layer.mask = gradient;

[self.layer insertSublayer:gradient atIndex:0];

次に、グラデーションが表示されます。黒から白までです。

トリックは何ですか?

21
Proud Member

CALayerのmaskプロパティは、マスクレイヤーのalphaコンポーネントを使用して、表示するものと表示しないものを決定します。両方の色(黒と白)が完全に不透明(透明度なし)であるため、マスクは効果がありません。これを修正するには、色の1つをクリアカラーに変更する必要があります。

gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], 
                                            (id)[[UIColor clearColor] CGColor], nil];

それが「トリック」です:D

37