Iphone iOS 7动态模糊效果与Control Center类似

Iphone iOS 7动态模糊效果与Control Center类似,iphone,objective-c,blur,ios7,Iphone,Objective C,Blur,Ios7,我正在尝试制作一个类似于iOS7中controlcenter的控制器。从WWDC课程#226中,我学会了如何获得不同效果的模糊图像 UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0); [view drawViewHierarchyInRect:rect]; UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImage

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

UIGraphicsBeginImageContextWithOptions(image.size, NULL, 0);

[view drawViewHierarchyInRect:rect];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

lightImage = [newImage applyLightEffect];
所以,换句话说,我们只是捕获一些图像(制作屏幕截图),执行模糊效果,并根据需要使用这些模糊图像

但如果你在一些动态内容上方打开control center,你会注意到control center模糊的背景和内容一样在变化

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


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

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

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];
    }
}
Utoolbar可以用于这种需要,因为它有他唯一的内置模糊机制,这种机制是动态的,很好。但不好的是,由于某种原因,它忽略了颜色,使背景看起来无法挽回

更新:

为避免颜色中断,请不要使用BartinColor。如果需要暗样式的模糊(使用UIBarStyleBlack),也可以更改工具栏的样式

2

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


在运行iOS 7的较旧设备上,使用导航栏提供模糊将不起作用。由于LiveFrost运行的是iOS 7的较轻版本,几乎没有t,我发现LiveFrost是一个很棒的、易于集成的实时模糊项目


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

您可以从故事板使用UIVisualEffect

在情节提要上拖动带有模糊的视觉效果。可以通过设置背景色的alpha来实现所需的效果。子视图应添加到“视觉效果”视图中,并且它们不受背景模糊的影响

必须在上述视图选项中选择振动效果

如图所示:


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

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

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

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

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