我已经找到了几个关于此的问题,但答案并没有解决我的问题.
我有两个使用presentModalViewController呈现的控制器.
我将modalTransitionStyle添加到主控制器调用的第一个控制器.第一个控制器正常显示第二个控制器(没有过渡样式).
FirstVC *first = [[FirstVC alloc] initWithNibName:@"FirstVC" bundle:nil]; first.modalTransitionStyle = UIModalTransitionStylePartialCurl; [self presentModalViewController:first animated:YES]; SecondVC *second = [[SecondVC alloc] initWithNibName:@"SecondVC" bundle:nil]; [self presentModalViewController:second animated:YES];
这是我以前用于MainVC的代码:
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:YES];
这就是发生的事情:
页面没有解开.我遇到这个的原因是什么?
解决方法
在我的实验中,看起来在部分卷曲之后你不能有一个标准的演示文稿(覆盖垂直),并同时将它们两个都解除,除非你在动画设置为NO的情况下进行解雇.
解决这个问题的方法是解除没有动画的secondVC(此代码在secondVC中):
-(IBAction)dismissSelf:(id)sender { [self dismissViewControllerAnimated:NO completion:nil]; }
然后在firstDC中再次使用动画解除viewDidAppear,在测试控制器未显示之后:
-(void)viewDidAppear:(BOOL)animated { if (![self isBeingPresented]) { [self dismissViewControllerAnimated:YES completion:nil]; } }
虽然上面的代码可以回到初始控制器的视图,但您会看到firstVC的视图出现在curl uncurls之前.如果你不想看到它,那么我找到解决这个问题的唯一方法就是创建一个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; }