UIAlertViewsがポップアップすると、背景にビネット効果があります。つまり、エッジがより暗くなり、中央が明るくなります。iOSでビネットエフェクトを行う方法は?
このビネット効果はココアタッチに組み込まれた場合、私は思っていました。私は私のカスタムビューの背後にビネットを見せたいと思います。
UIAlertViewsがポップアップすると、背景にビネット効果があります。つまり、エッジがより暗くなり、中央が明るくなります。iOSでビネットエフェクトを行う方法は?
このビネット効果はココアタッチに組み込まれた場合、私は思っていました。私は私のカスタムビューの背後にビネットを見せたいと思います。
は、UIKit(UIAlertViewはUIKitの一部であるため)に組み込まれていますが、公開されていませんので、です。
同じ効果を作成するのは難しいことではありません。放射状のグラデーションで、コードやPhotoshopで描画することができます。
UPDATE:あなたは必見がわかっている場合は、背景には、以下のクラス階層で_UIAlertNormalizingOverlayWindow
というクラスです。この効果は、余分な画像によって達成される事実
_UIAlertNormalizingOverlayWindow
_UIAlertOverlayWindow
UIWindow
文書化されていないものの使用に対してアプリが拒否されることはありませんか? – JoJo
@JoJo:はい、そうです。 –
- と別のウィンドウUialertviewの下に画像ビューが表示されます。そのウィンドウは他のビューを選択またはタッチできないようにします。そのイメージが欲しい場合は、右に表示されます。here
SVProgressHudこのタイプのエフェクトは、SVProgressHUDMaskTypeGradientの詳細を参照してください。
私は、選択した回答が正しくない可能性があり、潜在的に危険であると主張します。ここに私のソリューションです:
私は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.
あなた-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);
}
好みの値に調整します。
あなたが持っている任意のビューに追加します。エホバの証人。素敵なビネットエフェクト。
これは良い解決策ですが、遅いです。あらかじめレンダリングされた画像を見ることをお勧めします。 –
@LeoNatan Trueですが、カスタマイズ性の点でこれはより適切な解決策です。 –
私のための良いドロップインソリューション。ありがとう! – michaelsnowden
私はこれも疑問に思っています!カスタムアラートやHUDアイコンを表示するほとんどのアプリは、透明で透明な黒色のオーバーレイにはたいていて、本当に悪いです。 – BoltClock
あなたはおそらくちょうど私が本当に言うことができるすべてthatsのWebサイトの開発者である影の影を使用してこれを行うことができます –
@ジェームズカイル:それはウェブサイトではありません。それはアプリです。 – JoJo