Iphone iOS 7动态模糊效果与Control Center类似
我正在尝试制作一个类似于iOS7中controlcenter的控制器。从WWDC课程#226中,我学会了如何获得不同效果的模糊图像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
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的以下子类:。