UIPresentationController

简介

       UIPresentationController是 iOS8 新增的一个API,苹果的官方定义是:对象为所呈现的视图控制器提供高级视图的转换管理(从呈现视图控制器的时间直到它被消除期间)。其实说白了就是用来控制controller之间的跳转特效。

作用

  • 管理所有Modal出来的控制器
  • 管理\监听 切换控制器的过程
  • 控制器一旦调了presentViewController方法,控制器的presentationController,会先创建好了,然后整个控制器的切换由presentationController管理

常见的属性和方式

/*
    presentedViewController:     要 modal 显示的视图控制器
    presentingViewController:    跳转前视图控制器
    containerView()              容器视图
    presentedView()              被展现控制器的视图
*/
- (instancetype)initWithPresentedViewController:(UIViewController *)presentedViewController
                       presentingViewController:(UIViewController *)presentingViewController;

// 呈现过渡即将开始的时候被调用的
// 可以在此方法创建和设置自定义动画所需的view
- (void)presentationTransitionWillBegin;

// 在呈现过渡结束时被调用的,并且该方法提供一个布尔变量来判断过渡效果是否完成
- (void)presentationTransitionDidEnd:(BOOL)completed;

// 消失过渡即将开始的时候被调用的
- (void)dismissalTransitionWillBegin;

// 消失过渡完成之后调用,此时应该将视图移除,防止强引用
- (void)dismissalTransitionDidEnd:(BOOL)completed;

// 返回目标控制器Viewframe
- (CGRect)frameOfPresentedViewInContainerView;

实现步骤

       第一步.写一个遵守UIViewControllerTransitioningDelegate协议的类,来告诉控制器,谁是动画主管(UIPresentationController),谁是开始动画的具体细节负责类、谁是结束动画的具体细节负责类。

       第二步.写一个UIPresentationController的子类(动画主管) --> 负责「被呈现」及「负责呈现」的controller以外的controller,比如带渐变效果的黑色半透明背景View。在此步骤,起码需要重写以下5个方法:

1.presentationTransitionWillBegin
2.presentationTransitionDidEnd:
3.dismissalTransitionWillBegin
4.dismissalTransitionDidEnd:
5.frameOfPresentedViewInContainerView

       第三步.写一个遵守UIViewControllerAnimatedTransitioning协议的类,负责动画细节。比如怎么出现,位置在哪,动画细节如何等。

示例程序Demo

你可能感兴趣的:(UIPresentationController)