返回

iOS小技能:VC modal样式的应用 -将当前的VC的界面作为另一个VC的背景图片

IOS

一、前言

在iOS开发中,经常会遇到需要将当前视图控制器(VC)的界面作为另一个视图控制器(VC)的背景图片的情况。例如,在某个页面中弹出一个模态窗口,但是希望模态窗口的背景是当前页面的截图。使用系统自带的modal样式即可实现,而且性能更好。

二、实现步骤

  1. 首先,需要在当前视图控制器中创建一个新的视图控制器,并将这个新的视图控制器的modalPresentationStyle属性设置为UIModalPresentationCurrentContext。这样,新的视图控制器就会以模态的形式弹出,并且背景是当前视图控制器的截图。

  2. 在新的视图控制器中,可以添加任何需要的元素,例如按钮、文本框等。这些元素都会显示在当前视图控制器的截图之上。

  3. 当需要关闭新的视图控制器时,只需要调用dismiss方法即可。

三、注意事项

  1. 使用这种方法时,需要确保当前视图控制器的view属性不为nil。如果view属性为nil,那么新的视图控制器就不会以模态的形式弹出。

  2. 当新的视图控制器被弹出后,当前视图控制器的界面会变暗,并且无法与之交互。

  3. 如果需要在新的视图控制器中使用手势识别,那么需要在新的视图控制器中添加一个手势识别器。否则,手势识别器将无法识别手势。

四、示例代码

// 在当前视图控制器中创建新的视图控制器
UIViewController *newViewController = [[UIViewController alloc] init];

// 设置新的视图控制器的modalPresentationStyle属性为UIModalPresentationCurrentContext
newViewController.modalPresentationStyle = UIModalPresentationCurrentContext;

// 将新的视图控制器以模态的形式弹出
[self presentViewController:newViewController animated:YES completion:nil];

// 在新的视图控制器中添加一个按钮
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
[button setTitle:@"关闭" forState:UIControlStateNormal];
[button addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside];
[newViewController.view addSubview:button];

// 关闭新的视图控制器
- (void)closeButtonTapped {
    [self dismissViewControllerAnimated:YES completion:nil];
}

五、结语

通过iOS系统自带的modal样式,可以实现一种背景透明的视图控制器,从而达到在当前视图中推出另一个背景透明的视图控制器。这种方法简单易用,并且性能更好。