首页 文章

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

提问于
浏览
35

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

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

因此,换句话说,我们只捕获一些图像(制作屏幕截图),执行模糊效果并根据我们的需要使用此模糊图像 .

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

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

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

6 回答

  • 0

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

    1. The most unexpected: Use 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

    Update:

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

    2. FXBlurView.

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

    FBBlurView effect

  • 1

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

  • 2

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

    UIVisualEffect *blurEffect;
    blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
    
    UIVisualEffectView *visualEffectView;
    visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
    
    visualEffectView.frame = MYview.bounds;
    [MYview addSubview:visualEffectView];
    
  • 7

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

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

  • 12

    您可以从故事板中使用UIVisualEffect .

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

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

    见图:

  • 43

    使用导航栏提供模糊功能将无法在运行iOS 7的旧设备上运行 . 因为它们运行的是较轻的iOS 7版本而几乎没有

相关问题