如何使模态视图控制器透明
Posted
技术标签:
【中文标题】如何使模态视图控制器透明【英文标题】:how to make the modal view controller transparent 【发布时间】:2014-01-27 12:20:07 【问题描述】:我正在使用当前视图控制器从左侧显示一个新的视图控制器.. 我使用的代码是..
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);
我得到的输出是.. 在这里我可以调整视图控制器的视图大小,但是如何调整视图控制器的大小,以便背景中存在的视图我的意思是调用此模态视图的视图将是可见的,我可以执行操作..就像有一个按钮关闭此模式视图.. 谢谢..
【问题讨论】:
这个模态视图控制器有导航吗?还是只是打开然后关闭? @Fogmeister 我想在该模态视图中提供一个表格视图,以便主视图中的项目将根据所选的表格视图单元格进行更改 首先使用 controller.view = popmenu; 将黄色视图作为 ViewController 的主视图;而不是这个你应该使用 addSubView 。另一件事是你可以使用 splitViewController 来满足你的要求 @walinaqvi 当我尝试使用拆分视图控制器时出现此错误,仅在 UIUserInterfaceIdiomPad 下运行时才支持 UISplitViewController 我认为 iPhone 不支持拆分视图 ***.com/questions/12741224/… 【参考方案1】:如果您使用 presentViewController:animated:completion: 方法而不为显示的控制器指定 UIViewControllerTransitioningDelegate,则可以使显示的视图控制器透明,但显示的视图控制器将始终消失(即背景变为黑色)。
这是一个很好的教程,它解释了如何在 ios 7 上进行自定义转换 http://www.doubleencore.com/2013/09/ios-7-custom-transitions/
这是我的实验: https://github.com/Jafared/CustomTransitionTests
请注意,它仅适用于 iOS 7
【讨论】:
【参考方案2】:我正在使用这个解决方案..而不是创建另一个控制器和其他东西..这看起来很容易。
[UIView animateWithDuration:1.0 animations:^
//Move frame or transform view
popmenu.frame = CGRectMake(0,0,200,570);
table.frame = CGRectMake(200, 0, 120, 570);
];
【讨论】:
【参考方案3】:我在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];
这意味着您必须实现自己的动画。
【讨论】:
以上是关于如何使模态视图控制器透明的主要内容,如果未能解决你的问题,请参考以下文章