iOS自定义转场

1.官方目前支持的四种方式:

···
1.UINavigationController push 和 pop
2.UITabBarController 选择切换 Tab
3.Modal presentation 和 dismissal,视图控制器的模态显示和消失
4.UICollectionViewController CollectionViewController 与 UINavigationController 结合的转场方式
···

2.转场API

*** iOS 7 以协议的方式开放了自定义转场的 API,协议的好处是不再拘泥于具体的某个类,只要是遵守该协议的对象都能参与转场,使其可以非常灵活的使用。转场协议由5种协议组成,实际中只需要使用其中的两个或三个便能实现绝大部分的转场动画。***

  1. 动画控制器 (Animation Controllers) 遵守 UIViewControllerAnimatedTransitioning 协议,并且负责实际执行动画。
  1. 交互控制器 (Interaction Controllers) 通过遵守 UIViewControllerInteractiveTransitioning 协议,来控制可交互式(手势或重力感应…)动画转场,大多都是使用它的一个子类UIPercentDrivenInteractiveTransition来更简单的实现手势交互动画。
  2. 转场代理 (Transitioning Delegates) 根据不同的转场类型,提供需要的动画控制器和交互控制器。有3种转场代理:
    UINavigationControllerDelegate –自定义navigationController转场动画的时候**
    UITabBarControllerDelegate** –自定义tabbarController转场动画的时候**
    UIViewControllerTransitioningDelegate** –自定义present/dismiss的时候
  3. 转场上下文 (Transitioning Context) 提供转场中需要的数据,比如在转场过程中所参与的视图控制器和视图的相关属性。 转场上下文对象遵守 UIViewControllerContextTransitioning 协议,并且这是由系统负责生成和提供的。
  4. 转场协调器(Transition Coordinators) 可以在运行转场动画时,并行的运行其他动画。转场协调器遵守UIViewControllerTransitionCoordinator 协议

*** 要实现一个最低限度的转场动画,必须要满足三个条件 : ***

1. 动画控制器
2. 转场代理
3. 转场上下文(转场上下文是由系统提供的)
iOS自定义转场_第1张图片
Paste_Image.png

*** 第一个方法是返回动画的时间***
第二个方法是动画的具体执行,参数中的transitionContext遵守了UIViewControllerContextTransitioning协议
*** 我们点进去UIViewControllerContextTransitioning协议,可以找到许多的属性和方法,这些方法中最重要的几个方法和意义如下:***

  • (UIView*)containerView; //获取容器View
  • (void)completeTransition:(BOOL)didComplete; //通过此参数获知动画是否结束
  • (UIViewController)viewControllerForKey:(NSString)key; //获取转入、转出VC
  • (CGRect)initialFrameForViewController:(UIViewController*)vc //获取动画前VC的frame
  • (CGRect)finalFrameForViewController:(UIViewController*)vc; //获取动画后VC的frame

iOS 视图控制器转场
View Controller 转场
详解 iOS 8 UIPresentationController Custom Presentation
WWDC 2013 Session笔记 - iOS7中的ViewController切换
iOS 视图控制器转场详解

Paste_Image.png
iOS自定义转场_第2张图片
Paste_Image.png

注意

// dismiss 动画遇到的坑: // [[transitionContext containerView] addSubview:toVC.view]; //在 dismissal 中,注意不要像其他转场中那样将 toView(presentingView) 加入 containerView 中,否则本来可见的 presentingView 将会被移除出自身所处的视图结构消失不见。如果你在使用 Custom 模式时没有注意到这点,就很容易掉进这个陷阱而很难察觉问题所在,这个问题曾困扰了我一天。

参考 :这里讲到了这个问题(唐巧的博客)

iOS 视图控制器转场详解

你可能感兴趣的:(iOS自定义转场)