当弹出UIAlertViews时,背景会产生一个小插曲效果。也就是说,边缘会变暗,中心会变亮。
我想知道这种小插曲效果是否内置于Cocoa Touch中。我想在我的自定义视图后面显示这种小插曲效果。
当弹出UIAlertViews时,背景会产生一个小插曲效果。也就是说,边缘会变暗,中心会变亮。
我想知道这种小插曲效果是否内置于Cocoa Touch中。我想在我的自定义视图后面显示这种小插曲效果。
这个功能已经嵌入到UIKit中(就像UIAlertView是UIKit的一部分),但它不是公开的。
然而,创建相同的效果应该不会太难。 它只是一个径向渐变,可以在代码或Photoshop中绘制。
更新:如果您必须知道,背景是一个名为_UIAlertNormalizingOverlayWindow
的类,具有以下类层次结构:
_UIAlertNormalizingOverlayWindow
_UIAlertOverlayWindow
UIWindow
VignetteEffect
的类作为UIView
子类。-drawRect:
方法中添加以下代码:- (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);
}
根据您的喜好调整数值。
将其添加到任何视图中即可。Et voila。一个漂亮的晕影效果。
事实上,这个效果是通过额外的图片实现的 - 一个带有imageview的单独窗口显示在uialertview下面。那个窗口使得你不能选择或触摸任何其他视图。如果你想要那张图片,可以在这里找到。
我认为所选答案不正确且可能存在危险。这是我的解决方案:
我从SVProgressHud中复制了渐变绘图代码,并将其放入我的SSGradientView分支中:
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.