提问人:Afinainflowers 提问时间:8/18/2023 更新时间:8/21/2023 访问量:42
Uikit:在 UIViewController 后面模糊和变暗(如弹出框)
Uikit: blur and dim behind a UIViewController (like a popover)
问:
我在一些不同的控制器上展示了一个复杂的控制器 AskController(从 UIViewController、UIPopoverPresentationControllerDelegate 和 UIPopoverControllerDelegate 衍生而来),弹出样式。
有没有一种简单的方法可以自动调暗和模糊所述 AskController 后面发生的任何事情,并以任何方式消除 AskController 关闭时的这些影响?
不能使 AskController 成为 UIPopoverPresentationController 的后代。
即使设备多次改变方向,效果也必须起作用。
已经尝试设置 popoverPresentationController.backgroundColor - 什么都不做。 如果相关,这就是我的呈现方式:
let windowAsking = AskController()
windowAsking.modalPresentationStyle = .popover
if let popoverController = windowAsking.popoverPresentationController {
popoverController.sourceView = self.view
popoverController.sourceRect = centerOfTheScreen()
popoverController.permittedArrowDirections = []
popoverController.delegate = windowAsking
}
self.present(windowAsking, animated: true)
答:
0赞
Duncan C
8/19/2023
#1
以下是我的处理方式:
使视图控制器成为全屏模式。使用全屏模糊视觉效果视图作为背景。然后构建一个看起来像模态/弹出框的视图层次结构,并使其成为模糊视图的子视图。将点击手势识别器添加到模糊视图,以消除模式。
0赞
Afinainflowers
8/21/2023
#2
经过一番反复试验,我发现了一种方法:
lazy var blackerOutOfPreviousScreen: UIVisualEffectView = {
let blurEffect = UIBlurEffect(style: .systemUltraThinMaterialDark)
let blackerOut = UIVisualEffectView(effect: blurEffect)
blackerOut.backgroundColor = UIColor.black.withAlphaComponent(0.1)
return blackerOut
}()
当显示控制器时:
main?.view.addSubview(blackerOutOfPreviousScreen)
<insert anchoring to the edges of the screen>
这里的主要内容是显示 AskController 的控制器。
但是这种方式很尴尬,因为需要在打开控制器时分配 main,所以我会欣赏一种更好、更优雅的方式。
评论