2011-11-30 5 views
5

UIAlertViewsがポップアップすると、背景にビネット効果があります。つまり、エッジがより暗くなり、中央が明るくなります。iOSでビネットエフェクトを行う方法は?

vignette iOS

このビネット効果はココアタッチに組み込まれた場合、私は思っていました。私は私のカスタムビューの背後にビネットを見せたいと思います。

+0

私はこれも疑問に思っています!カスタムアラートやHUDアイコンを表示するほとんどのアプリは、透明で透明な黒色のオーバーレイにはたいていて、本当に悪いです。 – BoltClock

+0

あなたはおそらくちょうど私が本当に言うことができるすべてthatsのWebサイトの開発者である影の影を使用してこれを行うことができます –

+0

@ジェームズカイル:それはウェブサイトではありません。それはアプリです。 – JoJo

答えて

2

は、UIKit(UIAlertViewはUIKitの一部であるため)に組み込まれていますが、公開されていませんので、です。

同じ効果を作成するのは難しいことではありません。放射状のグラデーションで、コードやPhotoshopで描画することができます。

UPDATE:あなたは必見がわかっている場合は、背景には、以下のクラス階層で_UIAlertNormalizingOverlayWindowというクラスです。この効果は、余分な画像によって達成される事実

_UIAlertNormalizingOverlayWindow 
_UIAlertOverlayWindow 
UIWindow 
+0

文書化されていないものの使用に対してアプリが拒否されることはありませんか? – JoJo

+3

@JoJo:はい、そうです。 –

2

- と別のウィンドウUialertviewの下に画像ビューが表示されます。そのウィンドウは他のビューを選択またはタッチできないようにします。そのイメージが欲しい場合は、右に表示されます。here

+0

私は自分で手動で行う方法を知っていますが、これがシステムによって提供されているのかどうか疑問に思っていました。それは誰でもどのようにUISwitchを複製できるかのようなものですが、iOS 4から5まで見たときにUISwitchのスタイルを変更したので、それを行うのは良い考えではありません。 – JoJo

+0

私はUIKitがこのために画像を使用するのか疑問です。 –

+0

私はあなたがそれを保証します、実際には私は100%確信しています;)。あなたが知っている公開方法はありませんが、あなたは私的方法を間違いなく見ることができます。 – DanZimm

1

SVProgressHudこのタイプのエフェクトは、SVProgressHUDMaskTypeGradientの詳細を参照してください。

1

私は、選択した回答が正しくない可能性があり、潜在的に危険であると主張します。ここに私のソリューションです:

私はSSGradientViewのmy forkにSVProgressHudから勾配の描画コードをコピー:

SSGradientView *vignette = [SSGradientView new]; 
vignette.frame = [UIScreen mainScreen].currentBounds; 
vignette.backgroundColor = [UIColor clearColor]; 
vignette.direction = SSGradientViewDirectionRadial; 
UIColor *startColor = // We just need the colorspace. 
UIColor *endColor = // Visible vignette color. 
vignette.colors = @[ 
[startColor colorWithAlphaComponent:0.0f], 
[endColor colorWithAlphaComponent:1.0f] ]; 
vignette.locations = @[ @0.4f, @1.0f ]; 
[view insertSubview:vignette atIndex:0]; // Or equivalent. 
2

あなた-drawRect:メソッドにこのコードを追加しますUIView

のサブクラスとしてVignetteEffectというクラスを作成します。

- (void)drawRect:(CGRect)rect 
{ 

    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGColorSpaceRef colSp = CGColorSpaceCreateDeviceRGB(); 

    CGGradientRef gradient = CGGradientCreateWithColors(colSp, (__bridge CFArrayRef)[NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0] CGColor], (id)[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.5] CGColor], nil], 0); 

    CGContextDrawRadialGradient(context, gradient, self.center, 0, self.center, self.frame.size.height+self.frame.size.height/4, 0); 

    CGColorSpaceRelease(colSp); 
    CGGradientRelease(gradient); 

} 

好みの値に調整します。

あなたが持っている任意のビューに追加します。エホバの証人。素敵なビネットエフェクト。

+0

これは良い解決策ですが、遅いです。あらかじめレンダリングされた画像を見ることをお勧めします。 –

+0

@LeoNatan Trueですが、カスタマイズ性の点でこれはより適切な解決策です。 –

+0

私のための良いドロップインソリューション。ありがとう! – michaelsnowden

関連する問題