我以模态方式呈现导航 Controller ,以 TableView Controller 为根,并在用户点击单元格时推送更多 View Controller 。现在,我想对整个事物应用模糊/活力效果。
Storyboard看起来像这样:
现在,想要对整个导航 Controller 应用模糊效果,以便可以在下方看到初始 View Controller 中的图像。
通过对 TableView Controller 和详细 View Controller 应用相同的模糊效果,我取得了一些成功,如下所示:
TableView Controller
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView(frame: .zero)
tableView.backgroundColor = UIColor.clear
let blurEffect = UIBlurEffect(style: .dark)
let blurEffectView = UIVisualEffectView(effect: blurEffect)
tableView.backgroundView = blurEffectView
tableView.separatorEffect = UIVibrancyEffect(blurEffect: blurEffect)
}
}
细节 View Controller
class DetailViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .clear
let blurEffect = UIBlurEffect(style: .dark)
let blurView = UIVisualEffectView(effect: blurEffect)
blurView.translatesAutoresizingMaskIntoConstraints = false
view.insertSubview(blurView, at: 0)
NSLayoutConstraint.activate([
blurView.heightAnchor.constraint(equalTo: view.heightAnchor),
blurView.widthAnchor.constraint(equalTo: view.widthAnchor),
])
}
}
(我还将导航的模态呈现样式设置为.overFullScreen
)。
但是,在导航过渡到详细 View Controller 的最后,在模糊的背景中可以看到一个烦人的伪像:
我认为这与自 iOS 7 以来,推送的 View Controller 不能有透明背景有关,否则可以看到推送的 View Controller 在转换结束时立即被删除。
我尝试将模糊效果应用到导航 Controller ,并将两个 subview 改为透明,但它看起来也不太好。
无缝地将背景模糊/活力效果应用到导航 Controller 的内容的正确方法是什么?
最佳答案
尝试以下步骤。我还没有尝试过,但应该可以。
- 将背景图像添加到窗口到
didFinishLaunchingWithOptions
并默认隐藏它。 - 将相同的图像添加到呈现模态视图 Controller 中。
- 确保清除 View Controller 的背景。
- 因此,当您呈现时,它会显示模态视图 Controller 中的图像。
- 完成后取消隐藏窗口图像并隐藏 View Controller 图像。
- 当您点击后退按钮关闭 View 时,首先取消隐藏您的 View Controller 图像并隐藏您的窗口图像。所以你的动画看起来很正常。
如果您需要任何帮助,请告诉我。
关于ios - 具有模糊背景的模态导航 Controller ,在推送动画期间无缝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771344/