我正在尝试将视图控制器呈现在另一个上面,其中上部将是透明的,底部将具有此模糊效果。
发生的事情是我在所呈现的视图中看到了黑色背景,尽管它的颜色清晰。
我也在这里阅读,并做了完全相同的事情: Display clearColor UIViewController over UIViewController
//to present
PillView *pillv=[[PillView alloc]initWithPill:pill WithNum:num];
pillv.delegate=self;
UIVisualEffect *blurEffect;
blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView;
visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame=CGRectMake(0, 0, self.view.frame.size.width, [Globals sharedGlobals].titleHeight*self.view.frame.size.height);
[self.view addSubview:visualEffectView];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:pillv animated:NO completion:nil];
答案 0 :(得分:2)
您需要将UIVisualEffectView
添加到显示的视图控制器,而不是正在进行演示的人。
PillView *pillv=[[PillView alloc]initWithPill:pill WithNum:num];
pillv.delegate=self;
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame= pillv.view.bounds;
pillv.view.backgroundColor = [UIColor clearColor];
[pillv.view insertSubview:visualEffectView atIndex:0];
self.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:pillv animated:NO completion:nil];
因为OP似乎认为我的解决方案不起作用,所以这是一个展示这个的示例项目:
https://dl.dropboxusercontent.com/u/29456419/blurTest.zip
以下是视图(演示)的图片,然后是OverlayView:
答案 1 :(得分:2)
从Ios 8及更高层请使用UIModalPresentationOverCurrentContext而不是UIModalPresentationCurrentContext
答案 2 :(得分:0)
如果是iOS8或更高版本,请使用UIModalPresentationOverCurrentContext
作为演示文稿样式。
但是,关键设置是您需要将definesPresentationContext
设置为true,以便显示您希望看到的呈现控制器。
来自文档:
UIModalPresentationOverCurrentContext
在视图上显示内容的演示样式 控制器的内容,其definePresentationContext属性为YES。 UIKit可以向上走视图控制器层次结构以查找视图 想要定义表示上下文的控制器。观点 显示的内容下方不会从视图层次结构中删除 演讲结束时所以如果呈现视图控制器 不会在屏幕上填充不透明内容,即底层内容 透过。
在弹出框中呈现视图控制器时,此演示文稿 仅当过渡样式为时才支持样式 UIModalTransitionStyleCoverVertical。试图使用不同的 过渡样式触发异常。但是,您可以使用其他 转换样式(部分卷曲转换除外)如果是父级 视图控制器不在弹出窗口中。
适用于iOS 8.0及更高版本。
所以:
self.definesPresentationContext = true
self.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:pillv animated:NO completion:nil];