UIViewController透明背景

时间:2012-12-05 17:59:43

标签: ios xcode

我正在以这种方式创建一个viewcontroller:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"PhotoViewControlleriPhone" bundle:nil];
                                UIViewController *vc = [sb instantiateInitialViewController];

                               vc.view.backgroundColor = [UIColor clearColor];
                               self.modalPresentationStyle = UIModalPresentationCurrentContext;

                               [self presentModalViewController:vc animated:NO];

                               vc.view.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y + 64, imageView.frame.size.width, 200.000000);

                               vc.view.layer.cornerRadius = 10; // this value vary as per your desire
                               vc.view.clipsToBounds = YES;

viewcontroller不是全屏,因此您仍然可以看到前一个。我想能够看到它,但锁定它。就像当你使用ios facebook分享时,你会看到背景,但它会变得更暗,你无法与之交互。我怎么能这样做?

3 个答案:

答案 0 :(得分:4)

我认为问题在于您使用-presentModalViewController:animated:显示它。使用该方法带有关于您正在托管的视图控制器的一些假设;它所做的一个假设(至少在iPhone型设备上)是视图控制器占据整个屏幕并且是不透明的。

要解决此问题,请尝试手动将模态视图控制器的视图添加到当前视图控制器的视图中。您需要将视图控制器层次结构设置为与视图层次结构匹配,因此您的代码将如下所示:

[self addChildViewController:vc];
[self.view addSubview:vc.view];

您需要调整传入视图的帧以将其定位在新的超级视图中,但这样可以让您获得更多自由。

答案 1 :(得分:4)

我的解决方法是使用screenshot with code,将UIImage作为参数传递给新的UIViewController,并将其显示为背景图像。通过这种方式,它看起来是透明的,您不必禁用可以访问/访问的基础控件。

答案 2 :(得分:2)

<强> iOS8上+

您可以在iOS8 +下使用以下代码段,它适用于我

SecondViewController *secondViewController = [[SecondViewController alloc] init];
secondViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;           
[self presentViewController:secondViewController animated:YES completion:nil];