SwiftUI-弹出半透明的模态视图
UIKit
在 UIKit 中,我们可以通过以下步骤,实现一个类似系统 UIAlertController 的模态视图效果:
- 使用
present(_:animated:completion:)
函数 - 设置
modalPresentationStyle = .custom
- 设置 presetedViewController 的背景色为透明或半透明,可看到下层视图
- 通过
modalTransitionStyle
属性设置系统自带的动画(可选)
SwiftUI
SwiftUI 也可以实现类似的效果,我们需要用到 fullScreenCover 这个方法
struct CustomViewModifier: ViewModifier {
var body(content: Content) -> some View {
content
.fullScreenCover(isPresented: Binding<Bool>) {
// 可以在内部实现自定义动画
CustomerView()
}
.transaction { transcation in
// 如果实现了自定义动画,为了避免其与系统自带动画冲突,我们可以在这里将系统动画禁用
// 如果要直接用系统定义的动画,这一步可去掉
transcation.disablesAnimations = true
}
}
}
封装成 ViewModifier 后可以方便的“点”出来
通过以上方法,我们可以为自定义的模态视图增加淡入淡出或其他自定义动画,自定义动画方面, 在 SwiftUI 中实现起来会比在 UIKit 中更加方便。