当弹出UIAlertViews时,背景中会出现晕影效果。也就是说,边缘较暗,中心较浅。
我想知道这个小插曲效果是否内置于Cocoa Touch中。我想展示我的一个自定义视图背后的插图。
答案 0 :(得分:2)
是内置于UIKit中(因为UIAleView是UIKit的一部分),但它不公开。
但是,创造相同的效果应该不会太难。它只是一个径向渐变,您可以在代码或Photoshop中绘制。
更新:如果必须知道,后台是一个名为_UIAlertNormalizingOverlayWindow
的类,具有以下类层次结构:
_UIAlertNormalizingOverlayWindow
_UIAlertOverlayWindow
UIWindow
答案 1 :(得分:2)
实际上,这种效果是通过额外的图像实现的 - 在uialertview下面显示了一个带有imageview的单独窗口。该窗口使您无法选择或触摸任何其他视图。如果您想要该图像,可以在here
找到它答案 2 :(得分:2)
创建一个名为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);
}
根据自己的喜好调整值。
将其添加到您拥有的任何视图中。瞧瞧。一个很好的小插曲效果。
答案 3 :(得分:1)
SVProgressHud执行此类效果,请查看详细说明SVProgressHUDMaskTypeGradient的代码。
答案 4 :(得分:1)
我认为挑选的答案不正确并且有潜在危险。这是我的解决方案:
我将SVProgressHud中的渐变绘图代码复制到SSGradientView的my fork中:
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.