美文网首页animate
UIPresentationController

UIPresentationController

作者: ISwiftUI | 来源:发表于2017-03-13 16:07 被阅读78次

    简介

           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

        本文链接:https://www.haomeiwen.com/subject/odxqnttx.html