【问题标题】:iOS 7 dynamic blur effect like in Control CenteriOS 7 动态模糊效果,如控制中心
【发布时间】:2013-07-16 06:27:12
【问题描述】:

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

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];

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

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

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

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

【问题讨论】:

    标签: iphone objective-c blur ios7


    【解决方案1】:

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

    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.

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

    【讨论】:

    • 设置 tintColor 时,模糊会中断。只需使用默认工具栏或带有深色 barStyle 的工具栏。并且请不要在动态模式下使用 FXBlurView,因为它会比渲染模糊更快地消耗用户的电池。
    • 谢谢@FilipRadelic!正如你所说,我删除了 tintColor 并为工具栏设置了 UIBarStyleBlack 。它是动态的,现在看起来几乎完美:)。我会更新我的答案。
    • 如果这种类型的实现会导致被苹果拒绝,有什么想法吗?或者相反,他们会庆祝创造性的方法吗?
    • 如果您不使用私有 API 或违反 UI 指南,他们不会拒绝
    • 如果你想要更多的控制和实时动画,ypu可以使用这个UIView的子类:stackoverflow.com/a/19506076/774394
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

          看图:

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-07-21
              • 1970-01-01
              • 2015-09-09
              • 2013-06-06
              • 1970-01-01
              • 2014-07-11
              • 1970-01-01
              • 2014-01-30
              相关资源
              最近更新 更多