Ios 在另一个视图控制器上显示透明视图控制器

Ios 在另一个视图控制器上显示透明视图控制器,ios,objective-c,Ios,Objective C,我试图在另一个视图控制器上显示一个视图控制器,其中上部将是透明的,底部将具有这种模糊效果 所发生的事情是,我在呈现的视图中看到一个黑色背景,尽管它的颜色很清晰 我在这里也读过,也做过同样的事情: 您需要将UIVisualEffectView添加到演示视图控制器,而不是正在进行演示的控制器 PillView *pillv=[[PillView alloc]initWithPill:pill WithNum:num]; pillv.delegate=self; UIVisualEff

我试图在另一个视图控制器上显示一个视图控制器,其中上部将是透明的,底部将具有这种模糊效果

所发生的事情是,我在呈现的视图中看到一个黑色背景,尽管它的颜色很清晰

我在这里也读过,也做过同样的事情:


您需要将
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似乎认为我的解决方案不起作用,下面是一个示例项目来说明这一点:

下面是视图(显示)和覆盖视图的图片:


在Ios 8及更高版本中,请使用UIModalPresentationOverCurrentContext,而不是UIModalPresentationCurrentContext

如果在Ios 8或更高版本上,请使用
UIModalPresentationOverCurrentContext作为演示样式

但是,关键设置是,对于希望显示的显示控制器,需要将
definesPresentationContext
设置为true

从文件中:

UIModalPresentationOverCurrentContext

内容显示在视图上的表示样式 DefinePresentationContext属性为“是”的控制器内容。 UIKit可以沿着视图控制器层次结构查找视图 要定义表示上下文的控制器。观点 不会从视图层次结构中删除显示内容的下方 演讲结束时。因此,如果显示的视图控制器 不使用不透明内容(基础内容)填充屏幕 显示通过

在popover中演示视图控制器时,此演示文稿 仅当转换样式为时,才支持样式 UIModalTransitionStyleCoverVertical。尝试使用不同的 转换样式触发异常。但是,您可以使用其他 变换样式(部分卷曲变换除外),如果父对象 视图控制器不在popover中

在iOS 8.0及更高版本中提供

因此:


你是用模拟器还是用设备测试它?模拟器,有问题吗?也检查了设备不工作..所以你想让pillView透明吗?是的。事实上,它是透明的,我将它的背景设置为Clear,我不认为这就是我要找的。我希望底部视图控制器是模糊的,在它上面有pillV。这不是在显示的视图上创建模糊效果吗?我想OP要求透明视图!!!它还没有解决透明视图控制器的问题。因为我不会在您的方法中看到底部视图。当您在清晰的UIViewController上添加
UIVisualEffectView
时,父(显示)viewController视图显示为模糊。这就是他所说的wants@Curnelious你试过我给你看的吗?因为我在我的应用程序中使用它,而且它可以工作。唯一的区别是,我正在该视图控制器的
viewdiload
委托上设置显示的视图控制器属性,但我不认为这有什么区别可能是
pillv.modalPresentationStyle=UIModalPresentationOverCurrentContext?@Cy-4AH我认为它必须设置在控制器上,该控制器定义模态表示的上下文,因此
self
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];
self.definesPresentationContext = true
self.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:pillv animated:NO completion:nil];