天天看點

iOS 手動實作modal效果,從底部彈出一個控制器

系統模态方法:

//點選modal時調用.
- (IBAction)modal:(id)sender {
//當一個控制器被銷毀的時候,控制器的View是可以存在的. 
//當一個控制器被銷毀的時候,控制器View上所有的業務邏輯都不能夠處理.

 TwoViewController *twoVC = [[TwoViewController alloc] init];
    self.twoVC = twoVC;

//modal出來的View添加在視窗上面,把之前的根控制器的View移除

[self presentViewController:twoVC animated:YES completion:^{
//modal完成是調用
  }];

}

//modal出來的哪個控制器.哪個控制器就可以給它disMiss掉.
 - (IBAction)close:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
           

手動實作modal效果:

//擷取主視窗 
UIWindow *keyWindow = [UIApplicatio sharedApplication].keyWindow;

 //把modal出來的控制器添加到視窗上.
[keyWindow addSubview:twoVC.view];

//從下往上彈出的動畫,先把控制器的View的Y值設為螢幕的高度,剛開始看不到的狀态

 CGRect frame = twoVC.view.frame;
frame.origin.y = [UIScreen mainScreen].bounds.size.height;
twoVC.view.frame = frame;

// 再通過動畫效果把Y值設為就有從下往上彈出的動畫了.

[UIView animateWithDuration: animations:^{
 CGRect frame = twoVC.view.frame;
frame.origin.y = ;
twoVC.view.frame = frame;
 }completion:^(BOOL finished) {
[self.view removeFromSuperview];
 }];