在modal viewcontroller外点击屏幕dismiss

想要的结果:

自定义转场动画,弹出modalViewController,然后点击周围可以dismiss掉。

最终实现的效果忘记截图了,欢迎下载《现在视频》体验一下。。。。。。

问题:

因为自定义转场动画后,present出VC大小被改变了。
点击周围,实际上落点并不在当前的modalViewController内。所以点击手势并不能添加到当前的VC(也就是modalViewController)上。

实现方法:

我的实现方法是:给self.view.window添加一个tap,在手势的代理中判断点击是否在controller内。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
let tap = UITapGestureRecognizer(target: self, action: #selector(你的响应方法,实现为空即可))
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

tap.delegate = self
self.view.window?.addGestureRecognizer(tap)
}

override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)

tap.delegate = nil
self.view.window?.removeGestureRecognizer(tap)
}

实际的操作在这里:

1
2
3
4
5
6
7
8
9
10
11
extension XZBasicViewController: UIGestureRecognizerDelegate {
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
let point = gestureRecognizer.location(in: self.view)
if !self.view.point(inside: point, with: nil) {
self.navigationController?.dismiss(animated: true, completion: {
})
return true
}
return false
}
}

以上有错误,或者有更好的实现方式,欢迎提出,感谢

显示 Gitment 评论