简介
UIPresentationController是 iOS8 新增的一个API,苹果的官方定义是:对象为所呈现的视图控制器提供高级视图的转换管理(从呈现视图控制器的时间直到它被消除期间)。其实说白了就是用来控制controller
之间的跳转特效。
作用
- 管理所有Modal出来的控制器
- 管理\监听 切换控制器的过程
- 控制器一旦调了
presentViewController
方法,控制器的presentationController
,会先创建好了,然后整个控制器的切换由presentationControlle
r管理
常见的属性和方式
/*
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
以外的controlle
r,比如带渐变效果的黑色半透明背景View。在此步骤,起码需要重写以下5个方法:
1.presentationTransitionWillBegin
2.presentationTransitionDidEnd:
3.dismissalTransitionWillBegin
4.dismissalTransitionDidEnd:
5.frameOfPresentedViewInContainerView
第三步.写一个遵守UIViewControllerAnimatedTransitioning
协议的类,负责动画细节。比如怎么出现,位置在哪,动画细节如何等。
示例程序Demo
网友评论