36

我正在尝试制作一个类似于 iOS7 中的控制中心的控制器。从 WWDC session #226 我学会了如何获得具有不同效果的模糊图像

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

所以,换句话说,我们只是捕捉一些图像(制作截图),执行模糊效果并使用这个模糊的图像来满足我们的需要。

但是,如果您在一些动态内容上方打开控制中心,您会注意到控制中心的模糊背景正在发生变化,内容也在发生变化。

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

我看到它的唯一方法是捕捉内容并以一定的间隔(例如半秒)制作模糊效果。但它看起来是多余的。

4

6 回答 6

44

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

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 可以用于这个需求,因为它有他唯一的内置模糊机制,而且这个机制是动态的,有什么好处。但不好的是,由于某种原因,它会忽略颜色并使背景看起来无可救药......

工具栏效果

更新:

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

2.FXBlurView 。_

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

FBBlurView 效果

于 2013-09-12T15:52:37.303 回答
13

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

于 2014-06-05T12:46:25.533 回答
8

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

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

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

visualEffectView.frame = MYview.bounds;
[MYview addSubview:visualEffectView];
于 2015-01-05T11:30:28.140 回答
2

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

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

于 2014-04-06T13:53:46.150 回答
1

您可以使用情节提要中的 UIVisualEffect 。

在情节提要上拖动带有模糊的视觉效果。通过设置 Background COLOR 的 alpha 可以达到想要的效果。子视图应该添加到视觉效果视图的视图中,它们不受背景模糊的影响。

必须在上面的视图选项中选择活力效果。

见图片:

于 2014-12-12T09:11:06.847 回答
0

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

于 2014-04-06T13:29:15.210 回答