转场动画是下面几个情况: 导航控制器的 push 和 pop 动画。 普通控制器的 present 和 Dismiss 动画。
pesent 和 dismiss :

ViewController3* vc2 = [[ViewController3 alloc] init];[self presentViewController:vc2 animated:YES completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];
dismiss 多级
present 还有两个方法可以让我们实现一个跨级返回的效果。presentingViewController 和 presentedViewController 这两个方法分别是什么呢?这里简单解释一下返回两个的对应视图控制器。
当从 1 中弹出 2 后:
self.presentingViewController 在 1 中,就是 nil;在 2 中,就是 1
self.presentedViewController 在 1 中,就是 2;在 2 中,就是 nil
push 和 pop
pushViewController:animated: 方法用于将新的视图控制器推入导航栈。这意味着新控制器将显示在当前控制器的上方,同时当前控制器仍然在堆栈中。
SecondViewController *second = [[SecondViewController alloc] init]; [self.navigationController pushViewController:second animated:YES];
//返回上一级 [self.navigationController popViewControllerAnimated:YES];
//返回根视图 [self.navigationController popToRootViewControllerAnimated:YES];
//返回指定级数 (objectAtIndex:参数为想要返回的级数) [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];pop 有两个类别:
第一个类别就是返回上一层
[self.navigationController popViewControllerAnimated:YES];第二个类别就是返回到某一层
[self.navigationController popToRootViewControllerAnimated:YES];//这个是返回到根视图[self.navigationController popToViewController:viewController animated:YES];//返回指定的某一层视图控制器这里我们返回某一层的视图控制器可以通过这种方式来返回 self.navigationController.viewControllers[i] 这里的 i 是你需要的 viewController 的层级也可以采用 for 循环通过判断我们的一个 view 是否符合 isKindeOfClass 这个方法来找到对应的 UIView,来实现返回某一层的 ViewController。
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self.navigationController popToViewController:self.navigationController.viewControllers[0] animated:YES];}push 和 present 的区别:
push 是需要依赖导航控制器 Nav 的,页面有层级关系,压栈和出栈。而 present 不需要导航控制器,独立弹出覆盖在原页面。
在我看来,push 多用来进行层级之间的导航,适用于二级页面
而 present 则适合于独立的任务如登陆设置等。
原文发布于 CSDN:【iOS】push 和 present