如何使模态视图控制器透明

时间:2014-01-27 12:20:08

标签: ios objective-c uiviewcontroller

我正在使用当前视图控制器从左侧显示新的视图控制器。 我使用的代码是..

UIViewController *controller;
UINavigationController *navi;
UIView *popmenu = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 300)];
popmenu.backgroundColor = [UIColor yellowColor];
controller.view = popmenu;
controller.view.superview.backgroundColor = [UIColor clearColor];
navi = [[UINavigationController alloc]initWithRootViewController:controller];
navi.view.superview.backgroundColor = [UIColor clearColor];
CATransition *transition = [CATransition animation];
transition.duration = 0.4;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.view.window.layer addAnimation:transition forKey:nil];
[self presentViewController:navi animated:NO completion:nil];
navi.view.superview.frame = CGRectMake(0, 0, 200, 540);

我得到的输出是.. enter image description here 在这里我可以调整视图控制器的视图,但是如何调整视图控制器的大小以使背景中存在的视图我的意思是调用此模态视图的视图将是可见的并且我可以执行操作...就像有一个按钮关闭这个模态视图..谢谢..

3 个答案:

答案 0 :(得分:1)

如果使用presentViewController:animated:completion:方法而不为指定控制器指定UIViewControllerTransitioningDelegate,则可以使呈现的视图控制器透明,但呈现视图控制器将始终消失(即背景变为黑色)。

这是一个很好的教程,解释了如何在iOS 7上进行自定义转换 http://www.doubleencore.com/2013/09/ios-7-custom-transitions/

这是我的实验: https://github.com/Jafared/CustomTransitionTests

请注意,它仅适用于iOS 7

答案 1 :(得分:0)

我正在使用这个解决方案..而不是创建另一个控制器和其他东西..这看起来很容易。

  [UIView animateWithDuration:1.0 animations:^{
        //Move frame or transform view
        popmenu.frame = CGRectMake(0,0,200,570);
        table.frame = CGRectMake(200, 0, 120, 570);
    }];

答案 2 :(得分:0)

我在iOS7上使用了以下方法。

它将导航控制器上方的视图添加到正确的方向,响应新的和基础视图控制器的方向变化,背景最终是透明的。

UIView *rootView = [[[[self view] window] rootViewController] view];
UIView *myView = [[self myViewController] view];
 [myView setFrame:[rootView bounds]];
 [myView setTranslatesAutoresizingMaskIntoConstraints:YES];
 [myView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
 [rootView addSubview:myView];

这意味着您必须实现自己的动画。