如何在iOS上做小插图效果?

时间:2011-11-30 03:27:02

标签: iphone ios cocoa-touch

当弹出UIAlertViews时,背景中会出现晕影效果。也就是说,边缘较暗,中心较浅。

vignette iOS

我想知道这个小插曲效果是否内置于Cocoa Touch中。我想展示我的一个自定义视图背后的插图。

5 个答案:

答案 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.