1

を使用して「サンバースト」パターンをUIViewプログラムで描画する があります。ここで、エッジをグラデーションでマスキングしてこれを拡張したいと思います。効果的に各「バースト」を不透明から透明にフェードさせます。これはマスクでできると思いますが、円形にする方法がわかりません。UIBezierPathCAGradientLayer

これは私が試していることです-ビューをマスクしますが、グラデーションは線形です:

    CAGradientLayer *l = [CAGradientLayer layer];
    l.frame = CGRectMake(0.0f, 0.0f, rect.size.width, rect.size.height);
    l.cornerRadius = rect.size.width/2.0f;
    l.masksToBounds = YES;
    l.colors = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
    self.layer.mask = l;

CAGradientLayerエッジがぼやけた円でビューをマスクする他の方法を誰かが知っている場合、私は使用しないことにオープンです。

解決策 マットの洞察のおかげで、私は を使用してマスク ビューをCGContextDrawRadialGradient描画し、それを としてレンダリングし、UIImageそれをマスク レイヤーとして使用することになりました。このプロセスに興味がある人は、このテスト プロジェクトで使用されています。

4

3 に答える 3

1

明らかなアプローチは、この効果を手動で描画することです。非常に小さく始めて、サンバーストをどんどん大きくし、(同時に) 不透明度を減らしていきます。

一方、放射状のグラデーションを作成し、それをマスク (ビネット効果) として使用するだけで十分な場合があります。Core Graphics が放射状グラデーションを描画します。

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextDrawRadialGradient

また、次のようなタッチを追加するための CIFilters も非常に気に入っています。カタログを調べて、何が気に入ったかを確認してください。

https://developer.apple.com/library/ios/#documentation/graphicsimaging/reference/CoreImageFilterReference/Reference/reference.html

CIFilter は実際に、特にマスキングや合成と組み合わせた場合に、目的に合ったサンバースト トランジションを提供します。私の本からのサンバースト(アニメーションで使用される)の議論は次のとおりです。

http://www.apeth.com/iOSBook/ch17.html#_cifilter_transitions

于 2013-04-16T18:24:33.507 に答える
0

これを行うには、CALayer インスタンスを作成し、drawLayer:inContext: を実装するデリゲートを与え、そのメソッドの実装で放射状グラデーションを描画します。次に、その CALayer をマスクとして使用します。

于 2013-04-16T18:16:15.487 に答える
0

CAGradientLayer線形グラデーションを描画します。

影を設定して、それがニーズに合っているかどうかを確認できます。

l.shadowColor = [UIColor blackColor];
l.shadowRadius = rect.size.width / 2;
于 2013-04-16T17:46:15.160 に答える