除了push之外茴恰,還有另外一種控制器的切換方式汁尺,那就是Modal
任何控制器都能通過(guò)Modal的形式展示出來(lái)
Modal的默認(rèn)效果:新控制器從屏幕的最底部往上鉆卒废,直到蓋住之前的控制器為止
以Modal的形式展示控制器
- (void)presentViewController:(UIViewController*)viewControllerToPresent animated: (BOOL)flag completion:(void(^)(void))completion
關(guān)閉當(dāng)初Modal出來(lái)的控制器
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void(^)(void))completion;
實(shí)現(xiàn)原理:
- (IBAction)modal:(id)sender {
//當(dāng)一個(gè)控制器被銷毀的時(shí)候,控制器的View是可以存在的.
//當(dāng)一個(gè)控制器被銷毀的時(shí)候,控制器View上所有的業(yè)務(wù)邏輯都不能夠處理.
TwoViewController*twoVC = [[TwoViewControlleralloc]init];
self.twoVC= twoVC;
//modal出來(lái)的View添加在窗口上面,把之前的根控制器的View移除
//[self presentViewController:twoVC animated:YES completion:^{
// modal完成是調(diào)用
//}];
//手動(dòng)實(shí)現(xiàn)modal效果
//0.獲取主窗口
UIWindow*keyWindow = [UIApplicationsharedApplication].keyWindow;
//1.把modal出來(lái)的控制器添加到窗口上.
[keyWindowaddSubview:twoVC.view];
//2.從下往上鉆的動(dòng)畫,先把控制器的View的Y值設(shè)為屏幕的高度,一開(kāi)始看不到的狀態(tài)
CGRectframe = twoVC.view.frame;
frame.origin.y= [UIScreenmainScreen].bounds.size.height;
twoVC.view.frame= frame;
//再通過(guò)一動(dòng)畫效果把Y值設(shè)為0.就有一種往上鉆的動(dòng)畫了.
[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移除方法
}];
}