iOS 7动态模糊效果,如控制中心

时间:2013-07-17 15:40:01

标签: iphone objective-c blur ios7

我正在尝试制作一个与iOS7中的Control Center类似的控制器。从WWDC会议#226我已经学会了如何使用不同的效果获得模糊的图像

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

所以,换句话说,我们只是拍摄一些图像(制作截图),执行模糊效果并根据我们的需要使用这个模糊的图像。

但是如果你在一些动态内容之上打开控制中心,你会发现控制中心模糊的背景和内容都在变化。

有人知道如何复制这种行为吗?

我看到它的唯一方法是捕捉内容并在某个间隔(例如半秒)内产生模糊效果。但它看起来多余。

6 个答案:

答案 0 :(得分:43)

以下是我找到的现成解决方案:

<强> 1。最意想不到的:使用UIToolBar

- (id) initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame]))
    {
        [self setup];
    }
    return self;
}

- (id) initWithCoder:(NSCoder *)coder
{
    if ((self = [super initWithCoder:coder]))
    {
        [self setup];
    }
    return self;
}

- (void) setup
{
    if (iOS7OrLater)
    {
        self.opaque = NO;
        self.backgroundColor = [UIColor clearColor];

        UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:self.bounds];
        toolbar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
        toolbar.barTintColor = self.tintColor;
        [self insertSubview:toolbar atIndex:0];
    }
}

UIToolbar可以用于满足这种需求,但是它具有唯一的内置模糊机制,这种机制是动态的,有什么好处。但糟糕的是,在某种程度上它会忽略颜色并使背景看起来不可救药......

Toolbar effect

<强>更新

为避免颜色中断,请勿使用barTintColor。如果你想要暗色调模糊,你也可以改变工具栏的样式(使用UIBarStyleBlack)。

<强> 2。 FXBlurView

与工具栏不同,它更积极,但它的动态机制很少见,实际上它只能用于静态背景。 (动态=否)。

FBBlurView effect

答案 1 :(得分:12)

在iOS8中,我们可以使用UIVisualEffect类对视图实现模糊效果。

答案 2 :(得分:7)

您可以使用以下代码在视图上应用模糊效果。

UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];

UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];

visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];

答案 3 :(得分:2)

我发现LiveFrost是一个很棒的,易于集成的实时模糊项目。

https://github.com/radi/LiveFrost/

答案 4 :(得分:1)

您可以在故事板中使用UIVisualEffect。

在故事板上拖动带有模糊的视觉效果。通过设置背景颜色的α可以实现期望的效果。子视图应添加到视觉效果视图视图中,它们不受背景模糊的影响。

必须在上面的查看选项中选择Vibrancy效果。

见图:

答案 5 :(得分:0)

使用导航栏提供模糊功能不适用于运行iOS 7的旧设备。因为它们运行的​​是较轻的iOS 7版本而几乎没有