modal
除了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;
- 注意:以后想要把一个控制器的view添加到自己控制器的上面,一定要保证这个控制器不要被销毁。
- (IBAction)modal:(id)sender {
TwoViewController *vc = [[TwoViewController alloc] init];
vc.view.backgroundColor = [UIColor yellowColor];
// 模仿modal效果,Modal出来的控制器添加窗口上面
// 以后开发经验。以后一个控件只要想显示到最前面,就添加到窗口。
// 获取窗口
UIWindow *window = [UIApplication sharedApplication].keyWindow;
[window addSubview:vc.view];
// 往下平移一个控制器的高度
vc.view.transform = CGAffineTransformMakeTranslation(0, self.view.bounds.size.height);
[UIView animateWithDuration:0.25 animations:^{
// 清空形变
vc.view.transform = CGAffineTransformIdentity;
}];
// 强引用modal出来的控制器
self.presentVC = vc;
// UIView animateWithDuration:<#(NSTimeInterval)#> animations:<#^(void)animations#> completion:<#^(BOOL finished)completion#>
// modal一个控制器
[self presentViewController:vc animated:YES completion:nil];
NSLog(@"%@",self.presentedViewController);
}
modal出谁,谁就有权利dismiss
谁modal控制器,谁也有权利dismiss
[self dismissViewControllerAnimated:YES completion:nil];
Modal
在iPhone开发中
- Modal是一种常见的切换控制器的方式
- 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止
在iPad开发中
- Modal的使用频率也是非常高的
- 对比iPhone开发,Modal在iPad开发中多了一些用法
呈现样式
- 什么叫呈现样式
- Modal出来的控制器,最终显示出来的样子
Modal常见有4种呈现样式
- UIModalPresentationFullScreen :全屏显示(默认)
- UIModalPresentationPageSheet
- 宽度:竖屏时的宽度(768)
- 高度:当前屏幕的高度(填充整个高度)
- UIModalPresentationFormSheet :占据屏幕中间的一小块
- UIModalPresentationCurrentContext :跟随父控制器的呈现样式
过渡样式
什么叫过渡样式
- Modal出来的控制器,是以怎样的动画呈现出来
Modal一共4种过渡样式
- UIModalTransitionStyleCoverVertical :从底部往上钻(默认)
- UIModalTransitionStyleFlipHorizontal :三维翻转
- UIModalTransitionStyleCrossDissolve :淡入淡出
- UIModalTransitionStylePartialCurl :翻页(只显示部分,使用前提:呈现样式必须是UIModalPresentationFullScreen)