【iOS】modalPresentationStyle和modalTransitionStyle

641 阅读1分钟

在开发过程中经常出现如下代码:

let vc = MenuViewController.init()
            vc.modalTransitionStyle = .coverVertical
            vc.modalPresentationStyle = .overFullScreen
            self.present(vc, animated: true)

modalTransitionStyle效果

modalPresentationStyle效果

self.modalPresentationStyle = UIModalPresentationOverFullScreen;
self.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

1.modalPresentationStyle

**typedef** NS_ENUM(NSInteger, UIModalPresentationStyle) {

    UIModalPresentationFullScreen = 0,

    UIModalPresentationPageSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),

    UIModalPresentationFormSheet API_AVAILABLE(ios(3.2)) API_UNAVAILABLE(tvos),

    UIModalPresentationCurrentContext API_AVAILABLE(ios(3.2)),

    UIModalPresentationCustom API_AVAILABLE(ios(7.0)),

    UIModalPresentationOverFullScreen API_AVAILABLE(ios(8.0)),

    UIModalPresentationOverCurrentContext API_AVAILABLE(ios(8.0)),

    UIModalPresentationPopover API_AVAILABLE(ios(8.0)) API_UNAVAILABLE(tvos),

    UIModalPresentationBlurOverFullScreen API_AVAILABLE(tvos(11.0)) API_UNAVAILABLE(ios) API_UNAVAILABLE(watchos),

    UIModalPresentationNone API_AVAILABLE(ios(7.0)) = -1,

    UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,

};

官方文档中枚举了多种方式,实际使用过程中UIModalPresentationOverFullScreen使用的频率最高.其中custom类型需要自定义.UIModalPresentationOverFullScreenUIModalPresentationOverCurrentContext,动画效果区别不大,但是之前的viewcontroller的view会被放在下面,不会被移除。

2.modalTransitionStyle

typedef NS_ENUM(NSInteger, UIModalTransitionStyle) {
    UIModalTransitionStyleCoverVertical = 0,
    UIModalTransitionStyleFlipHorizontal __TVOS_PROHIBITED,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl NS_ENUM_AVAILABLE_IOS(3_2) __TVOS_PROHIBITED,
};

常用的是 UIModalTransitionStyleCrossDissolve 主要参考

参考2