除了push之外,还有另外一种控制器的切换方式,那就是Modal
任何控制器都能通过Modal的形式展示出来
Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止
以Modal的形式展示控制器
- (void)presentViewController:(UIViewController*)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion
关闭当初Modal出来的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void(^)(void))completion;
实现原理:
- (IBAction)modal:(id)sender {
//当一个控制器被销毁的时候,控制器的View是可以存在的.
//当一个控制器被销毁的时候,控制器View上所有的业务逻辑都不能够处理.
TwoViewController*twoVC = [[TwoViewControlleralloc]init];
self.twoVC= twoVC;
//modal出来的View添加在窗口上面,把之前的根控制器的View移除
//[self presentViewController:twoVC animated:YES completion:^{
// modal完成是调用
//}];
//手动实现modal效果
//0.获取主窗口
UIWindow*keyWindow = [UIApplicationsharedApplication].keyWindow;
//1.把modal出来的控制器添加到窗口上.
[keyWindowaddSubview:twoVC.view];
//2.从下往上钻的动画,先把控制器的View的Y值设为屏幕的高度,一开始看不到的状态
CGRectframe = twoVC.view.frame;
frame.origin.y= [UIScreenmainScreen].bounds.size.height;
twoVC.view.frame= frame;
//再通过一动画效果把Y值设为0.就有一种往上钻的动画了.
[UIViewanimateWithDuration:0.5animations:^{
CGRectframe = twoVC.view.frame;
frame.origin.y=0;
twoVC.view.frame= frame;
}completion:^(BOOLfinished) {
[self.viewremoveFromSuperview];//显示twoVC后移除oneVC中的view,是移除view控制器还在,view也还在,只是不显示,同pop移除方法
}];
}