在我的实验中,您似乎无法在部分卷曲后进行标准演示(垂直封面),并同时关闭它们,除非您在动画设置为 NO 的情况下进行关闭。
解决此问题的一种方法是在没有动画的情况下关闭 secondVC(此代码在 secondVC 中):
-(IBAction)dismissSelf:(id)sender {
[self dismissViewControllerAnimated:NO completion:nil];
}
然后在第一个VC中再次在viewDidAppear中用动画关闭,在测试控制器没有被呈现后:
-(void)viewDidAppear:(BOOL)animated {
if (![self isBeingPresented]) {
[self dismissViewControllerAnimated:YES completion:nil];
}
}
虽然上面的代码可以返回到初始控制器的视图,但您会看到 firstVC 的视图出现在 curl 展开之前。如果您不想看到它,那么我能找到解决该问题的唯一方法是创建 secondVC 的图像,在解除 secondVC 之前将其作为(在图像视图中)子视图添加到 firstVC。因此,要做到这一点,secondVC 中的代码应该是这样的(请注意,您必须链接到 QuartzCore 并将其导入 secondVC 才能正常工作):
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UIImage *img = [self imageWithView:self.view];
FirstViewController *first = (FirstViewController *)self.presentingViewController;
UIImageView *iv = [[UIImageView alloc] initWithFrame:first.view.bounds];
iv.image = img;
[first.view addSubview:iv];
}
-(IBAction)dismissSelf:(id)sender {
[self dismissViewControllerAnimated:NO completion:nil];
}
- (UIImage *)imageWithView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, [[UIScreen mainScreen] scale]);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}