DYModalNavigationController
DYModalNavigationController 是一个简单的 UINavigationController 子类,使用 Swift 5.0 编写。使用场景
- 以模态方式呈现一个带有圆角的较小视图控制器,覆盖当前上下文(例如内容相对较小时,标准的模态呈现将显示很多空空间)。设置固定大小以使导航控制器的大小不随屏幕方向改变而调整。
- 以带有淡入过渡效果的顶部、底部、左侧和右侧边距呈现覆盖当前上下文的模态视图控制器。它背后的视图控制器在边距处仍可见(除非边距设置为 0)。在屏幕方向改变时大小会自动调整。
- 在 SwiftUI 项目中使用,即使没有使用 UIViewControllerRepresentable。只需创建 DYModalNavigationController 实例,然后对该实例调用 present() 即可(从版本 1.2.1 开始可用)
示例项目
要检查示例项目,只需克隆仓库或下载 zip 文件。
特性
- 创建一个固定大小的 DYModalNavigationController,当您的视图控制器实例在改变屏幕方向时不改变大小。
- 设置背景模糊或暗淡效果
- 自定义 DYModalNavigationController 视图的圆角
- 设置滑动进入/退出动画(可自定义动画移动方向)或淡入/淡出动画
- 自定义阴影
- 自定义动画过渡持续时间
安装
推荐使用 Cocoapods 或 Carthage 进行安装。
Cocoapods
target '[项目名称]' do pod 'DYModalNavigationController' end
Carthage:简单地将以下行添加到您的 Cartfile。
github "DominikButz/DYModalNavigationController" ~> 1.0
查看下面的版本历史以获取当前版本。
然后,在项目的根目录下运行 "carthage update DYModalNavigationController --platform iOS"。遵循 GitHub 上 carthage 项目中描述的步骤(点击上方兼容 carthage 的盾牌)。
请确保将 DYModalNavigationController 导入到您的视图控制器子类中
import DYModalNavigationController
使用方法
查看以下示例。
代码示例:固定大小 DYModalNavigationController 带背景模糊
let size = CGSize(width: 300, height: 200)
var settings = DYModalNavigationControllerSettings()
settings.slideInDirection = .right
settings.slideOutDirection = .right
settings.backgroundEffect = .blur
self.navController = DYModalNavigationController(rootViewController: contentVC(), fixedSize: size, settings: settings)
代码示例:带边距和淡入效果的 DYModalNavigationController
var settings = DYModalNavigationControllerSettings()
settings.animationType = .fadeInOut
// animationType .slideInOut is default setting!
self.navController = DYModalNavigationController(rootViewController: contentVC(), fixedSize: nil, settings: settings)
// with fixedSize nil, the size will be set according to the top, bottom, left, right margins in the settings.
代码示例:带自定义动画的 DYModalNavigationController
var settings = DYModalNavigationControllerSettings()
settings.animationType = .custom
self.navController = DYModalNavigationController(rootViewController: contentVC(), fixedSize: size, settings: settings, customPresentationAnimation: { (transitionContext) in
self.foldOut(transitionContext: transitionContext, navController: self.navController)
}, customDismissalAnimation: { (transitionContext) in
self.foldIn(transitionContext: transitionContext, navController: self.navController)
})
修改日志
版本 1.2.2
导航控制器在展示时没有绑定到容器视图的底部锚点。仅当导航控制器具有固定大小且从屏幕顶部或底部进入时,约束才会生效。此更改防止在底部安全区域较大的设备(如iPhone 11等)上出现间隙。
版本 1.2.1
在DYModalNavigationControllerSettings中添加了自定义Mask属性(允许圆角)。添加了带有present功能的SwiftUI扩展。
版本 1.2
在自定义动画闭包中添加了backgroundEffectView作为可选参数。
版本 1.1
在初始化器中添加了自定义展示动画和自定义消失动画。
版本 1.0
初始版本。
作者
许可协议
DYModalNavigationController 采用 MIT 许可协议。更多信息请参阅 LICENSE 文件。