我有一个ViewController
,在主要内容的边缘有20个点填充。这是透明的颜色。
然后我使用以下内容将其作为Modal
打开。
noteDetailController.modalPresentationStyle = .overCurrentContext
present(noteDetailController, animated: false, completion: nil)
我的想法是,我会设置UITapGestureRecognizer
以允许用户点按填充区域中的任意位置以关闭Modal
。
UITapGestureRecognizer
Modal ViewController
会触及以下内容
self.parentController?.dismiss(animated: false, completion: nil)
我遇到的问题是,ViewController
下面的Modal
似乎正在响应按下屏幕,加载和解除Modals
时存在重大延迟。
这种逻辑看起来是否正确,我是否按照您期望的方式做事?似乎present
和dismiss
开始发生不同步,并且加载了多个Modals
。
感谢您的时间。
答案 0 :(得分:0)
下面的视图控制器不应该是触摸事件,而另一个视图控制器放在它上面。
performSegue(withIdentifier: "showModal", sender: nil)
使用IBOutlet将模态的容器视图连接到模态视图控制器,将UITapGestureRecognizer添加到模态视图(填充)并实现UIGestureRecognizerDelegate方法以检测点击确实仅在填充中而不是在填充中容器视图本身:
@IBOutlet weak var containerView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(hide(gr:)))
tap.delegate = self
view.addGestureRecognizer(tap)
}
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
if let v = touch.view, v.isDescendant(of: containerView) {
return false
}
return true
}
@objc func hide(gr: UITapGestureRecognizer) {
dismiss(animated: true)
}