iOS之modal(模态)

一、简单介绍

除了push之外,还有另外一种控制器的切换方式,那就是Modal

任何控制器都能通过Modal的形式展⽰出来

Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为⽌


二、代码实现

1.在当前控制器中写弹出modal窗口的代码

- (IBAction)jump2two:(UIButton *)sender {

     //创建一个新的modal并弹出

    YYtwoViewController *two=[[YYtwoViewController alloc]init];

    //在two上用导航控制器包装,让弹出的模态窗口有一个导航栏可以放返回按钮                               UINavigationController *nvc=[[UINavigationController alloc]initWithRootViewController:two];

    [self presentViewController:nvc animated:YES completion:^{

       NSLog(@"弹出一个模态窗口");

    }];

}    

2.使模态窗口消失要在弹出的模态窗口的控制器中写以下代码

-(void)change{

     //如果一个控制器是以模态的形式展现出来的, 可以调用该控制器以及该控制器的子控制器让控制器消失

    [self dismissViewControllerAnimated:YES completion:^{

        NSLog(@"移除");

    }];

}

三、何时使用

在实际的开发中,如果控制器之间的关系紧密一般用导航控制器,如果控制器之间的关系不是很紧密就用modal

四、内部机制

(1)弹出之后,window上面只有一个子视图。

(2)虽然当前界面上展示在我们眼前的时twoview,但是window的根控制器仍然是NJviewController,它并没有切换window的根控制器,而仅仅只是换了window上面显示的视图。

(3)移除的视图并没有销毁,因为控制器并没有销毁,所以控制器对应的view也没有销毁。

(4)在模态弹出(完全显示后),在方法中传入two作为参数,默认就有一个控制器强引用着它。

(5)当向下移除之后,只要调用了控制器的dismiss方法让窗口关闭,modal就释放了。

(6)通常弹出的模态窗口都会提供一个导航条,让界面拥有导航条的最快的方式是给它包装一个导航控制器。

(7)如果一个控制器是以模态的形式展现出来的。可以调用该控制器以及该控制器的子控制器,让该控制器消失。


五、一开始就介绍了,模态窗口默认是从下向上弹出的。其实模态窗口还有其他的弹出方式

直接上代码:

   SecondViewController*second = [[SecondViewControlleralloc]init];

   second.view.backgroundColor= [UIColorredColor];

   /**

   modal 的控制的的 view 的尺寸  

   UIModalPresentationFullScreen = 0, // - 满屏

   UIModalPresentationPageSheet NS_ENUM_AVAILABLE_IOS(3_2),// - 弹出的菜单

   UIModalPresentationFormSheet NS_ENUM_AVAILABLE_IOS(3_2),- 弹出的菜单

   */

   //只针对iPad,对iPhone不适用

   second.modalPresentationStyle=UIModalPresentationFormSheet;

   /**

   modal 控制的的动画样式

   UIModalTransitionStyleCoverVertical = 0,

   UIModalTransitionStyleFlipHorizontal,//翻转

   UIModalTransitionStyleCrossDissolve,//淡入淡出

   UIModalTransitionStylePartialCurl  // - 翻页

   */

   second.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;

   [self presentViewController:second animated:YES completion:nil];


五、其他

   UIModalPresentationOverFullScreen NS_ENUM_AVAILABLE_IOS(8_0),//原来的不隐藏

   UIModalPresentationOverCurrentContext NS_ENUM_AVAILABLE_IOS(8_0)//原来的不隐藏

UIViewController的modalPresentationStyle的上面两个值是可以让原来的控制器view不消失,保持在弹出的控制器的下面,可以用来实现酷狗音乐的转场动画。

你可能感兴趣的:(iOS之modal(模态))