在另一个上呈现透明视图控制器

时间:2015-10-22 12:39:38

标签: ios objective-c

我正在尝试将视图控制器呈现在另一个上面,其中上部将是透明的,底部将具有此模糊效果。

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

我也在这里阅读,并做了完全相同的事情: 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];

3 个答案:

答案 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:

Presenting ViewController Overlay ViewController

答案 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];