Peek and pop (UIViewControllerPreviewing) 在 iOS 13 中已弃用。它将被新的contextMenuInteraction
东西取代。
那么如何直接替换 peek and pop 呢?换句话说,我如何将目标视图控制器显示为预览(peek),然后让用户从那里弹出到实际目标视图控制器的呈现?
这是我正在尝试的,但它与旧的 peek and pop 不同:
override func viewDidLoad() {
super.viewDidLoad()
let inter = UIContextMenuInteraction(delegate: self)
self.view.addInteraction(inter)
}
func contextMenuInteraction(_ inter: UIContextMenuInteraction,
configurationForMenuAtLocation loc: CGPoint) -> UIContextMenuConfiguration? {
let config = UIContextMenuConfiguration(identifier: "preview" as NSString,
previewProvider: { SecondViewController() }, actionProvider: nil)
return config
}
func contextMenuInteraction(_ interaction: UIContextMenuInteraction,
willCommitWithAnimator animator: UIContextMenuInteractionCommitAnimating) {
// animator.preferredCommitStyle = .pop
if let vc = animator.previewViewController {
animator.addCompletion {
self.present(vc, animated: true, completion: nil)
}
}
}
在这个简单的测试中,第一个视图控制器的整个背景视图变成了一个我们可以长按查看第二个视图控制器预览的地方。发生的情况是我们确实看到了预览,并且用户可以点击它。但随后预览被解除,然后出现第二个视图控制器。
那不是偷看和流行。Peek and pop 意味着预览成为第二个视图控制器。它应该成长为演示文稿(“流行音乐”)。
我尝试将动画师设置preferredCommitStyle
为.pop
(如注释掉的行所示),但没有任何区别。
有没有人弄清楚这一点?
编辑Apple 自己的应用程序也不能正确执行此操作。在照片应用程序中,如果您长按一张照片以获取上下文菜单和预览,如果您点击预览,它会被关闭,然后推送的图像会突然出现。此外,如果您尝试返回(点击返回按钮),您会崩溃。