Ios UIViewController透明背景

Ios UIViewController透明背景,ios,xcode,Ios,Xcode,我以以下方式创建viewcontroller: UIStoryboard *sb = [UIStoryboard storyboardWithName:@"PhotoViewControlleriPhone" bundle:nil]; UIViewController *vc = [sb instantiateInitialViewController]; vc.vi

我以以下方式创建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共享一样,你可以看到背景,但背景会变得更暗,你无法与之互动。我如何才能做到这一点?

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

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

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

您需要调整传入视图的帧以将其定位在新的superview中,但这应该会让您有更多的自由。

我的解决方法是,将UIImage作为参数传递给新的UIViewController,并将其显示为背景图像。这样,它看起来是透明的,并且您不必禁用可能可以访问/访问的底层控件。

iOS8+

您可以使用下面的iOS8+代码段,这对我很有用

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

我尝试了您提供给我的代码,但它给出的结果与[self-presentModalViewController:vc animated:NO]相同;您是否设置了传入视图控制器的
视图
属性的
frame
属性?好主意,您甚至可以模糊该屏幕截图,使其像iOS7一样:)这是一个极好的主意,但在较旧的设备上运行会不会有点慢?